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