Miklix

Jak nastavit samostatné fondy PHP-FPM v NGINX

Vydáno: 15. února 2025 v 11:49:14 UTC
Poslední aktualizace: 12. ledna 2026 v 8:29:53 UTC

V tomto článku proberu konfigurační kroky potřebné pro spuštění více PHP-FPM poolů a připojení NGINX k nim přes FastCGI, což umožňuje oddělení a izolaci procesů mezi virtuálními hostiteli.


Tato stránka byla strojově přeložena z angličtiny, aby byla přístupná co největšímu počtu lidí. Strojový překlad bohužel ještě není dokonalá technologie, takže může dojít k chybám. Pokud si přejete, můžete si prohlédnout původní anglickou verzi zde:

How to Set Up Separate PHP-FPM Pools in NGINX

Informace v tomto příspěvku jsou založeny na NGINX 1.4.6 a PHP-FPM 5.5.9 běžících na Ubuntu Serveru 14.04 x64. Pro jiné verze mohou, ale nemusí být platné. (Aktualizace: Mohu potvrdit, že od Ubuntu Serveru 24.04, PHP-FPM 8.3 a NGINX 1.24.0 všechny instrukce v tomto příspěvku stále fungují.)

Nastavení více podprocesních fondů PHP-FPM oproti spouštění všeho ve stejném fondu má řadu výhod. Mezi hlavní patří zabezpečení, oddělení/izolace a správa zdrojů.

Ať už je vaše motivace jakákoli, tento příspěvek vám s tím pomůže :-)

Část 1 – Nastavení nového PHP-FPM poolu

Nejprve je třeba najít adresář, kde PHP-FPM ukládá konfigurace poolu. V Ubuntu 14.04 je to standardně /etc/php5/fpm/pool.d. Pravděpodobně tam již existuje soubor s názvem www.conf, který obsahuje konfiguraci pro výchozí pool. Pokud jste se na tento soubor ještě nepodívali, je pravděpodobné, že byste si ho měli projít a upravit v něm nastavení pro vaši konfiguraci, protože výchozí nastavení jsou pro poměrně slabý server, ale prozatím si jen vytvořte kopii, abychom nemuseli začínat od nuly:

sudo cp www.conf mypool.conf

Samozřejmě nahraďte „mypool“ jakýmkoli názvem, pod kterým chcete, aby se váš pool nazýval.

Nyní otevřete nový soubor pomocí nano nebo libovolného textového editoru, který preferujete, a upravte jej podle svého účelu. Pravděpodobně budete chtít upravit čísla podřízených procesů a případně i uživatele a skupinu, pod kterými bude pool běžet, ale dvě nastavení, která musíte bezpodmínečně změnit, jsou název poolu a socket, na kterém naslouchá, jinak bude konfliktovat se stávajícím poolem a vše přestane fungovat.

Název poolu je v horní části souboru, uzavřený v hranatých závorkách. Ve výchozím nastavení je to [www]. Změňte ho na libovolný; doporučuji použít stejný název, jaký jste použili pro konfigurační soubor, takže pro účely tohoto příkladu jej změňte na [mypool]. Pokud jej nezměníte, zdá se, že PHP-FPM načte pouze první konfigurační soubor s tímto názvem, což pravděpodobně způsobí problémy.

Pak je potřeba změnit socket nebo adresu, na které nasloucháte, což je definováno direktivou listen. PHP-FPM standardně používá unixové sockety, takže vaše direktiva listen bude pravděpodobně vypadat takto:

listen = /var/run/php5-fpm.sock

Můžete jej změnit na libovolný platný název, ale opět doporučuji držet se něčeho podobného názvu konfiguračního souboru, takže jej můžete například nastavit na:

listen = /var/run/php5-fpm-mypool.sock

Dobře, uložte soubor a ukončete textový editor.

Část 2 – Aktualizace konfigurace virtuálního hostitele NGINX

Nyní je třeba otevřít soubor virtuálního hostitele NGINX s konfigurací FastCGI, kterou chcete změnit na nový pool – nebo spíše se připojit k novému socketu.

Ve výchozím nastavení v Ubuntu 14.04 jsou tyto uloženy v /etc/nginx/sites-available, ale lze je definovat i jinde. Pravděpodobně nejlépe víte, kde se nacházejí konfigurace vašeho virtuálního hostitele ;-)

Otevřete příslušný konfigurační soubor ve vašem oblíbeném textovém editoru a vyhledejte direktivu fastcgi_pass (která musí být v kontextu umístění) definující socket PHP-FPM. Tuto hodnotu musíte změnit tak, aby odpovídala nové konfiguraci poolu PHP-FPM, kterou jste provedli v prvním kroku, takže v našem příkladu byste ji změnili na:

Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;

Pak uložte a zavřete i tento soubor. Teď už je to skoro hotové.

Část 3 – Restart PHP-FPM a NGINX

Aby se provedené změny konfigurace projevily, restartujte PHP-FPM i NGINX. Možná bude stačit restartovat místo restartu, ale mně to přijde trochu nespolehlivé, v závislosti na tom, která nastavení se změní. V konkrétním případě jsem chtěl, aby staré podřízené procesy PHP-FPM okamžitě skončily, takže bylo nutné PHP-FPM restartovat, ale pro NGINX může restart stačit. Vyzkoušejte si to sami.

sudo service php5-fpm restart
sudo service nginx restart

A voilà, máte hotovo. Pokud jste vše udělali správně, upravený virtuální hostitel by nyní měl používat nový fond PHP-FPM a neměl by sdílet podřízené procesy s žádnými jinými virtuálními hostiteli.

Sdílet na BlueskySdílejte na FacebookuSdílet na LinkedInSdílet na TumblrSdílet na XSdílet na LinkedInPřipnout na Pinterest

Mikkel Christensen

O autorovi

Mikkel Christensen
Mikkel je tvůrcem a majitelem webu miklix.com. Má více než 20 let zkušeností jako profesionální programátor/vývojář softwaru a v současné době pracuje na plný úvazek pro velkou evropskou IT společnost. Pokud zrovna nepíše blog, věnuje svůj volný čas široké škále zájmů, koníčků a aktivit, což se může do jisté míry odrážet v rozmanitosti témat na tomto webu.