NGINX webový server (jako reverzní proxy) obsluhuje aplikace PHP prostřednictvím FastCGI protokol (jako backendový aplikační server). NGINX využívá PHP-FPM (FastCGI Process Manager), alternativní PHP FastCGI implementace, která běží na pozadí jako démon a naslouchá CGI žádosti. Dodává se s dalšími funkcemi navrženými pro napájení vysoce zatížených webů nebo webových aplikací, ale lze jej použít pro weby jakékoli velikosti.
Nejen, že PHP-FPM podporuje konfiguraci FastCGI zdrojů, ale také zlepšuje mnoho z FastCGI interní a zvyšuje hlášení chyb, ukončování skriptů a mnoho dalšího. Obsahuje PHP démonizaci, správu procesů, dynamický počet procesů, ze kterých mohou pocházet požadavky, chybovou hlavičku, podporu zrychleného nahrávání a další.
Chcete-li přijmout FastCGI požadavky od NGINX , PHP-FPM může buď poslouchat na TCP/IP soket nebo soket domény UNIX. Bez ohledu na to, kterou adresu zvolíte, je to, co NGINX používá k připojení (požadavky proxy) k PHP-FPM , pomocí fastcgi_pass
směrnice.
Tato příručka vysvětluje, jak nakonfigurovat NGINX na server PHP aplikací pomocí PHP-FPM . Popisuje, kdy použít TCP/IP soket nebo soket domény UNIX pro připojení NGINX na PHP-FPM a proč.
Tato příručka předpokládá, že máte NGINX a PHP-FPM nainstalován na vašem systému Linux, jinak viz:
- Jak nainstalovat LEMP Server na CentOS 8
- Jak nainstalovat LEMP stack PhpMyAdmin na server Ubuntu 20.04
- Jak nainstalovat NGINX, MySQL/MariaDB a PHP na RHEL 8
- Jak nainstalovat LEMP na server Debian 10
Co bych měl použít:UNIX Domain Socket nebo TCP/IP Socket?
UNIX doména (nebo IPC ) sokety jsou prostředky meziprocesové komunikace (IPC), které umožňují efektivní výměnu dat mezi procesy běžícími na stejném operačním systému při TCP/IP (nebo internetová doména ) sokety umožňují procesům komunikovat po síti.
Na rozdíl od TCP/IP soket, který identifikuje server podle IP adresy a portu (např. 127.0.0.1:9000 ), můžete server svázat se soketem domény UNIX pomocí názvu cesty k souboru (např. /run/php-fpm/www.sock ), který je viditelný v souborovém systému.
Doménový soket UNIX je speciální typ souboru – vztahují se na něj oprávnění k souborům a adresářům (jako je tomu u jakéhokoli jiného typu souboru UNIX) a lze jej použít k omezení toho, které procesy na hostiteli mohou soubor číst a zapisovat do něj, (a tedy komunikovat s backend serverem).
Tímto způsobem je soket domény UNIX bezpečný, protože jej mohou používat pouze procesy na místním hostiteli. TCP/IP socket může být vystaven internetu, což představuje bezpečnostní riziko, pokud nebudou implementována zvláštní bezpečnostní opatření, jako je firewall.
Důležité je použití UNIXu doménový soket není stejný jako použití TCP/IP Pokud jde o výkon, několik testů a benchmarků prokázalo, že sokety domén UNIX jsou rychlejší. Hlavní nevýhodou doménových soketů UNIX je, že jsou méně škálovatelné, podporují pouze meziprocesovou komunikaci v rámci stejného operačního systému (OS).
Kde mohu nakonfigurovat adresu pro poslech PHP-FPM?
Můžete nakonfigurovat adresu PHP-FPM naslouchá v konfiguračním souboru fondu zdrojů. Všimněte si, že s PHP-FPM , můžete spustit několik skupin procesů s různými nastaveními. Výchozí fond se nazývá www
.
Umístění konfiguračního souboru fondu zdrojů závisí na způsobu PHP a PHP-FPM jsou nainstalovány v systému Linux (ať už jde o výchozí/jedinou verzi nebo více verzí současně).
Například na CentOS 8 , s jedinou verzí jsou všechny konfigurační soubory PHP umístěny v /etc
adresář a výchozí PHP-FPM pool (www)
konfigurační soubor je /etc/php-fpm.d/www.conf :
Chcete-li zobrazit všechny konfigurační soubory PHP, použijte následující příkaz ls.
# ls /etc/php*
Seznam všech konfiguračních souborů PHP
Na Ubuntu 20.04 , konfigurační soubory PHP jsou umístěny v /etc/php/<php-version>/
adresář a výchozí PHP-FPM pool (www)
konfigurační soubor je /etc/php/<php-version>/fpm/pool.d/www.conf
:
$ ls /etc/php/7.4/
Seznam všech konfiguračních souborů PHP na Ubuntu
Konfigurace PHP-FPM pro poslech na UNIX doménovém soketu
Konfigurace PHP-FPM chcete-li naslouchat na soketu domény UNIX, otevřete výchozí PHP-FPM konfiguračního souboru fondu pomocí vašeho oblíbeného textového editoru.
# vim /etc/php-fpm.d/www.conf #Ubuntu/Debian OR $ sudo vim /etc/php/7.4/fpm/pool.d/www.conf #CentOS/RHEL/Fedora
Poté vyhledejte direktivu listen a nastavte ji na cestu k souboru soketu domény UNIX následovně. Pamatujte, že většina instalací standardně používá doménový soket UNIX.
listen = /run/php/php7.4-fpm.sock #Ubuntu/Debian OR listen = /run/php-fpm/www.sock #CentOS/RHEL/Fedora
Pokud používáte doménový soket UNIX, musíte také nastavit příslušná oprávnění pro čtení/zápis pro soubor, abyste umožnili připojení z webového serveru NGINX. Ve výchozím nastavení běží NGINX jako uživatel a skupina nginx na CentOS/RHEL/Fedora a www-data na Ubuntu a Debian .
Najděte tedy listen.owner
a listen.group
parametry a podle toho je nastavte. Nastavte také režim na 0660 pomocí listen.mode
parametr.
------------- On Debian and Ubuntu ------------- listen.owner = www-data listen.group = www-data listen.mode = 0660 ------------- On CentOS/RHEL and Fedora ------------- listen.owner = nginx listen.group = nginx listen.mode = 0660
Pamatujte, že pokud oprávnění pro soubor soketu domény UNIX nejsou správně nastavena, NGINX může vrátit chybu špatné brány.
Konfigurace PHP-FPM
Konfigurace PHP-FPM pro poslech na TCP/IP soketu
Ačkoli je soket domény UNIX rychlejší než soket TCP/IP, první je méně škálovatelný, protože může podporovat pouze meziprocesovou komunikaci na stejném operačním systému. Pokud NGINX a backendový aplikační server (PHP-FPM ) běží na různých systémech, budete muset nakonfigurovat PHP-FPM k naslouchání připojení na soketu TCP/IP.
V PHP-FPM konfiguračního souboru fondu, nastavte listen
adresu následovně. Ujistěte se, že port, který jste vybrali, není používán jiným procesem nebo službou ve stejném systému.
listen = 127.0.0.1:3000
Konfigurace PHP-FPM pro TCP Socket
Konfigurace NGINX pro práci s aplikačním serverem PHP-FPM
Jakmile nakonfigurujete adresu PHP-FPM naslouchá, musíte nakonfigurovat NGINX k proxy serveru přes tuto adresu pomocí fastcgi_pass
konfigurační parametr v konfiguračním souboru bloku virtuálního serveru.
Pokud je například konfigurační soubor pro váš web /etc/nginx/conf.d/example.com.conf , otevřete jej pro úpravy.
# vim /etc/nginx/conf.d/example.com.conf
Hledejte location
blok pro zpracování .php
soubory a nastavte fastcgi_pass
Pokud jste nakonfigurovali PHP-FPM pro naslouchání na soketu domény UNIX, postupujte takto.
fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian OR fastcgi_pass unix:/run/php-fpm/www.sock #CentOS/RHEL/Fedora
Připojte Nginx k PHP-FPM pomocí Unix Socket
Nebo použijte TCP/IP adresu, pokud jste nakonfigurovali PHP-FPM k poslechu na TCP/IP zásuvka. Pokud backendový aplikační server (PHP-FPM ) běží na samostatném serveru (nahraďte 10.42.0.10 s IP adresou počítače, na kterém běží server PHP-FPM FastCGI).
fastcgi_pass 10.42.0.10:3000;
Připojte Nginx k PHP-FPM pomocí TCP Socket
Důležité :V systému CentOS 8 , PHP-FPM je definován jako upstream server v /etc/nginx/conf.d/php-fpm.conf soubor v rámci upstream bloku s názvem php-fpm .
Zde můžete provést příslušné změny v závislosti na adrese PHP-FPM je nakonfigurován pro naslouchání v konfiguračním souboru fondu. Výchozí konfigurace ukazuje na soket domény UNIX.
upstream php-fpm { server unix:/run/php-fpm/www.sock; }
Nakonfigurujte PHP Upstream Server v Nginx
a v souboru bloku serveru vašeho webu jednoduše nastavte fastcgi_pass
parametr, jak je znázorněno.
fastcgi_pass php-fpm;
Nakonfigurujte Nginx na PHP-FPM Upstream Server
Po provedení změn v PHP-FPM a NGINX konfigurace, zkontrolujte správnost jejich konfigurační syntaxe následovně.
------------- On Debian and Ubuntu ------------- $ sudo php-fpm -t $ sudo nginx -t ------------- On CentOS/RHEL and Fedora ------------- # php-fpm -t # nginx -t
Zatímco výstup příkazu zobrazuje pouze hlavní konfigurační soubor, všechny ostatní konfigurační soubory jsou zahrnuty a zkontrolovány také.
Zkontrolujte konfiguraci Nginx a PHP-FPM
Dále musíte restartovat obě služby, aby se změny projevily, pomocí příkazu systemctl.
------------- On Debian and Ubuntu ------------- $ sudo systemctl restart nginx $ sudo systemctl restart php7.4-fpm ------------- On CentOS/RHEL and Fedora ------------- # systemctl restart nginx # systemctl restart php-fpm
Pokud se objeví nějaké chyby, můžete zkontrolovat NGINX a PHP-FPM log soubory pomocí příkazu cat.
------------- On Debian and Ubuntu ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php7.4-fpm.log ------------- On CentOS/RHEL and Fedora ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php-fpm/www-error.log
To je vše, co jsme pro vás měli. Sekci komentářů níže lze použít k pokládání otázek. Další informace najdete v dokumentaci NGINX a dokumentaci PHP-FPM.
Sharing is Caring…Sdílet na FacebookuSdílet na TwitteruSdílet na LinkedinSdílet na Redditu