Weboldal keresés

NGINX csatlakoztatása PHP-FPM-hez UNIX vagy TCP/IP Socket használatával


Az NGINX webszerver (mint fordított proxy) a PHP-alkalmazásokat a FastCGI protokollon keresztül szolgálja ki (háttéralkalmazásszerverként). Az NGINX a PHP-FPM-et (FastCGI Process Manager) használja, egy alternatív PHP FastCGI implementációt, amely démonként fut a háttérben, figyelve a >CGI kéréseket. Extra funkciókkal rendelkezik, amelyeket nagy terhelésű webhelyek vagy webes alkalmazások működtetésére terveztek, de bármilyen méretű webhelyhez használható.

A PHP-FPM nemcsak a FastCGI erőforráskészletek konfigurálását támogatja, hanem a FastCGI számos belső elemét is javítja, és növeli a hibajelentést és a szkriptet. felmondás, és még sok más. Tartalmaz PHP démonizálást, folyamatkezelést, dinamikus számú folyamatot, ahonnan kérések érkezhetnek, hibafejlécet, gyorsított feltöltési támogatást stb.

A FastCGI kérések elfogadásához az NGINXtől, a PHP-FPM figyelhet egy TCP/IP socketen vagy UNIX tartományon foglalat. Bármelyik címet választja is, az NGINX azt használja a PHP-FPM-hez való csatlakozáshoz (proxy kérések) a fastcgi_pass direktíva használatával.

Ez az útmutató elmagyarázza, hogyan kell konfigurálni az NGINX-et a szerver PHP-alkalmazásaihoz PHP-FPM használatával. Leírja, hogy mikor kell TCP/IP vagy UNIX tartományi socketet használni az NGINX és a PHP-FPM összekapcsolásához, és miért.

Ez az útmutató feltételezi, hogy az NGINX és a PHP-FPM telepítve van a Linux rendszerére, ellenkező esetben lásd:

  • A LEMP szerver telepítése CentOS 8 rendszeren
  • A LEMP verem PhpMyAdmin telepítése az Ubuntu 20.04 kiszolgálón
  • Az NGINX, a MySQL/MariaDB és a PHP telepítése az RHEL 8-ra
  • A LEMP telepítése Debian 10 kiszolgálóra

Mit használjak: UNIX Domain Socket vagy TCP/IP Socket?

A UNIX tartományi (vagy IPC) socketek a folyamatok közötti kommunikáció (IPC) eszközei, amelyek hatékony adatcserét tesznek lehetővé az ugyanazon az operációs rendszeren futó folyamatok között, miközben a TCP /IP (vagy Internet Domain) aljzatok lehetővé teszik a folyamatok számára a hálózaton keresztüli kommunikációt.

Ellentétben a TCP/IP sockettel, amely IP-cím és port alapján azonosítja a szervert (pl. 127.0.0.1:9000), a szervert UNIX tartományi sockethez kötheti egy fájl elérési útja (pl. /run/php-fpm/www.sock), amely a fájlrendszerben látható.

A UNIX tartományi socket egy speciális fájltípus – fájl- és könyvtárengedélyek vonatkoznak rá (mint minden más típusú UNIX fájlra), és korlátozható, hogy a gazdagépen mely folyamatok olvashatják és írhatják a fájlt, (és így kommunikál a háttérkiszolgálóval).

Így a UNIX tartományi socket biztonságos, mert csak a helyi gazdagépen lévő folyamatok használhatják. Egy TCP/IP socket ki van téve az internetnek, ami biztonsági kockázatot jelenthet, hacsak nem hajtanak végre további biztonsági intézkedéseket, például tűzfalat.

Fontos, hogy a UNIX tartományi socket használata a teljesítmény tekintetében nem ugyanaz, mint a TCP/IP socket, számos teszt és benchmark bizonyította, hogy a UNIX tartományi socketek gyorsabbak. A UNIX tartományi socketek fő hátránya, hogy kevésbé skálázhatók, csak ugyanazon az operációs rendszeren (OS) belül támogatják a folyamatok közötti kommunikációt.

Hol konfigurálhatom a PHP-FPM hallgatási címet?

A PHP-FPM címet az erőforráskészlet konfigurációs fájljában konfigurálhatja. Vegye figyelembe, hogy a PHP-FPM segítségével több folyamatkészletet futtathat különböző beállításokkal. Az alapértelmezett készlet neve www.

Az erőforráskészlet konfigurációs fájljának helye attól függ, hogy a PHP és a PHP-FPM hogyan telepítve van egy Linux rendszeren (akár alapértelmezett/egyetlen verzióról van szó, akár több verzióról egyszerre) .

Például a CentOS 8 rendszeren egyetlen verzió esetén az összes PHP konfigurációs fájl a /etc könyvtárban és az alapértelmezett PHP-FPM könyvtárban található. pool (www) konfigurációs fájl: /etc/php-fpm.d/www.conf:

Az összes PHP konfigurációs fájl listázásához használja a következő ls parancsot.

ls /etc/php*

Ubuntu 20.04 esetén a PHP konfigurációs fájlok a /etc/php// könyvtárban és az alapértelmezett PHP-FPM könyvtárban találhatók. > pool (www) konfigurációs fájl: /etc/php//fpm/pool.d/www.conf:

ls /etc/php/7.4/

A PHP-FPM beállítása UNIX tartományi socketen való hallgatáshoz

A PHP-FPM UNIX tartományi socketen való hallgatás beállításához nyissa meg az alapértelmezett PHP-FPM készletkonfigurációs fájlt kedvenc szövegszerkesztője segítségével.

sudo vim /etc/php/7.4/fpm/pool.d/www.conf	#Ubuntu/Debian
OR
vim /etc/php-fpm.d/www.conf			#CentOS/RHEL/Fedora

Ezután keresse meg a listen direktívát, és állítsa be a UNIX tartományi socket fájl elérési útjára az alábbiak szerint. Vegye figyelembe, hogy a legtöbb telepítés alapértelmezés szerint UNIX tartományi socketet használ.

listen = /run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
listen = /run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Ha UNIX tartományi socketet használ, akkor a megfelelő olvasási/írási engedélyeket is be kell állítania a fájlhoz, hogy engedélyezze a kapcsolatokat az NGINX webszerverről. Alapértelmezés szerint az NGINX nginx felhasználóként és csoportként fut a CentOS/RHEL/Fedora rendszeren és www-data az Ubuntu rendszeren. és Debian.

Tehát keresse meg a listen.owner és a listen.group paramétereket, és állítsa be őket ennek megfelelően. Ezenkívül állítsa a módot 0660 értékre a listen.mode paraméterrel.

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

Vegye figyelembe, hogy ha a UNIX tartományi socket fájl engedélyei nincsenek megfelelően beállítva, az NGINX rossz átjáróhibát adhat vissza.

A PHP-FPM beállítása TCP/IP socketen történő hallgatáshoz

Bár a UNIX tartományi socket gyorsabb, mint a TCP/IP socket, az előbbi kevésbé skálázható, mivel csak ugyanazon az operációs rendszeren támogatja a folyamatok közötti kommunikációt. Ha az NGINX és a háttéralkalmazásszerver (PHP-FPM) különböző rendszereken fut, akkor a figyeléshez konfigurálnia kell a PHP-FPM protokollt. TCP/IP aljzat a kapcsolatokhoz.

A PHP-FPM készlet konfigurációs fájljában állítsa be a hallgatás címet az alábbiak szerint. Győződjön meg arról, hogy a kiválasztott portot nem használja más folyamat vagy szolgáltatás ugyanazon a rendszeren.

listen = 127.0.0.1:3000

Az NGINX konfigurálása a PHP-FPM alkalmazáskiszolgálóval való együttműködésre

Miután beállította a PHP-FPM figyelő címet, be kell állítania az NGINX-t, hogy a fastcgi_pass használatával proxykérést kérjen ezen a címen keresztül. konfigurációs paraméter egy virtuális szerver blokk konfigurációs fájljában.

Ha például a webhely konfigurációs fájlja /etc/nginx/conf.d/example.com.conf, nyissa meg szerkesztésre.

vim /etc/nginx/conf.d/example.com.conf 

Keresse meg a location blokkot a .php fájlok feldolgozásához, és állítsa be a fastcgi_pass paramétert az alábbiak szerint, ha a PHP-FPM-et úgy állította be, hogy UNIX-on figyeljen. domain socket.

fastcgi_pass unix:/run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Vagy használjon TCP/IP-címet, ha a PHP-FPM beállítást úgy állította be, hogy egy TCP/IP socketen figyeljen. Ha a háttéralkalmazásszerver (PHP-FPM) egy külön szerveren fut (cserélje ki a 10.42.0.10 elemet annak a gépnek az IP-címére, amelyen a PHP-FPM FastCGI szerver fut).

fastcgi_pass  10.42.0.10:3000;

Fontos: CentOS 8 esetén a PHP-FPM upstream szerverként van definiálva a / etc/nginx/conf.d/php-fpm.conf fájlt, egy upstream blokkon belül, php-fpm néven.

Itt ennek megfelelően módosíthatja azt a címet, amelyen a PHP-FPM figyelni van konfigurálva a készletkonfigurációs fájlban. Az alapértelmezett konfiguráció UNIX tartományi socketre mutat.

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

és webhelye szerverblokk-fájljában egyszerűen állítsa be a fastcgi_pass paramétert az ábra szerint.

fastcgi_pass php-fpm;

Miután módosította a PHP-FPM és az NGINX konfigurációkat, ellenőrizze a konfigurációs szintaxis helyességét az alábbiak szerint.

------------- On Debian and Ubuntu -------------
sudo php-fpm -t
sudo nginx -t

------------- On CentOS/RHEL and Fedora  -------------
php-fpm -t
nginx -t

Míg a parancs kimenete csak a fő konfigurációs fájlt jeleníti meg, az összes többi konfigurációs fájl is szerepel és ellenőrzött.

Ezután újra kell indítania a két szolgáltatást a módosítások alkalmazásához a systemctl paranccsal.

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

Ha bármilyen hibát észlel, a cat paranccsal ellenőrizheti az NGINX és a PHP-FPM naplófájlokat.

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

Ez minden, amit adtunk neked. Az alábbi megjegyzés rovatban kérdéseket tehet fel. További információkért tekintse meg az NGINX dokumentációját és a PHP-FPM dokumentációját.