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.
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:
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:
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:
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 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.
