Si të lidhni NGINX me PHP-FPM duke përdorur folenë UNIX ose TCP/IP


Ueb serveri NGINX (si përfaqësues i kundërt) shërben aplikacionet PHP përmes protokollit FastCGI (si një server aplikacioni mbështetës). NGINX përdor PHP-FPM (FastCGI Process Manager), një implementim alternativ i PHP FastCGI që funksionon në sfond si një demon, duke dëgjuar për kërkesat CGI. Ai vjen me veçori shtesë të krijuara për të fuqizuar faqet e internetit të ngarkuara rëndë ose aplikacionet në internet, por mund të përdoret për sajte të çdo madhësie.

Jo vetëm që PHP-FPM mbështet konfigurimin e grupeve të burimeve FastCGI, por gjithashtu përmirëson shumë nga pjesët e brendshme të FastCGI dhe rrit raportimin e gabimeve, përfundimin e skriptit dhe shumë më tepër. Ai përmban demonizimin e PHP, menaxhimin e procesit, një numër dinamik procesesh nga të cilat mund të vijnë kërkesat, kokën e gabimit, mbështetjen e përshpejtuar të ngarkimit dhe më shumë.

Për të pranuar kërkesat FastCGI nga NGINX, PHP-FPM mund të dëgjojë ose në një fole TCP/IP ose në prizë domeni UNIX. Cilado adresë që zgjidhni të përdorni është ajo që përdor NGINX për t'u lidhur (kërkesat për proxy) me PHP-FPM, duke përdorur direktivën fastcgi_pass.

Ky udhëzues shpjegon se si të konfiguroni NGINX në aplikacionet PHP të serverit duke përdorur PHP-FPM. Ai përshkruan se kur duhet përdorur një prizë TCP/IP ose fole domeni UNIX për të lidhur NGINX me PHP-FPM dhe pse.

Ky udhëzues supozon se ju keni NGINX dhe PHP-FPM të instaluar në sistemin tuaj Linux, përndryshe, shihni:

  • Si të instaloni serverin LEMP në CentOS 8
  • Si të instaloni LEMP stack PhpMyAdmin në serverin Ubuntu 20.04
  • Si të instaloni NGINX, MySQL/MariaDB dhe PHP në RHEL 8
  • Si të instaloni LEMP në serverin Debian 10

Prizat e domenit UNIX (ose IPC) janë një mjet komunikimi ndër-procesor (IPC) që lejojnë shkëmbimin efikas të të dhënave ndërmjet proceseve që ekzekutohen në të njëjtin sistem operativ ndërsa prizat TCP/IP (ose Domain Internet) lejojnë proceset të komunikojnë përmes një rrjeti.

Ndryshe nga një prizë TCP/IP që identifikon një server me një adresë IP dhe port (p.sh. 127.0.0.1:9000), ju mund të lidhni një server me një prizë domeni UNIX duke përdorur një emër skedari (p.sh. /run/php-fpm/www. sock), e cila është e dukshme në sistemin e skedarëve.

Një prizë domeni UNIX është një lloj i veçantë skedari - lejet e skedarit dhe drejtorisë zbatohen për të (siç është rasti me çdo lloj skedari tjetër UNIX) dhe mund të përdoret për të kufizuar se cilat procese në host mund të lexojnë dhe shkruajnë në skedar. (dhe kështu komunikoni me serverin e backend-it).

Në këtë mënyrë, një prizë domeni UNIX është e sigurt sepse vetëm proceset në hostin lokal mund ta përdorin atë. Një prizë TCP/IP mund të ekspozohet ndaj internetit duke paraqitur një rrezik sigurie nëse nuk zbatohen masa shtesë sigurie, si muri i zjarrit.

E rëndësishmja, përdorimi i një prize domeni UNIX nuk është i njëjtë me përdorimin e një foleje TCP/IP për sa i përket performancës, disa teste dhe standarde kanë vërtetuar se prizat e domenit UNIX janë më të shpejta. E meta kryesore e prizave të domenit UNIX është se ato janë më pak të shkallëzueshme, ato mbështesin vetëm komunikimin ndër-procesor brenda të njëjtit sistem operativ (OS).

Ju mund të konfiguroni adresën që dëgjon PHP-FPM në një skedar konfigurimi të grupit të burimeve. Vini re se me PHP-FPM, mund të ekzekutoni disa grupe procesesh me cilësime të ndryshme. Grupi i paracaktuar quhet www.

Vendndodhja e skedarit të konfigurimit të grupit të burimeve varet nga mënyra se si instalohen PHP dhe PHP-FPM në një sistem Linux (nëse është një version i parazgjedhur/i vetëm ose versione të shumta njëkohësisht).

Për shembull, në CentOS 8, me një version të vetëm, të gjithë skedarët e konfigurimit PHP ndodhen në direktorinë /etc dhe skedari i konfigurimit të paracaktuar të grupit PHP-FPM (www) është /etc/php-fpm.d/www.conf:

Për të renditur të gjithë skedarët e konfigurimit PHP, përdorni komandën e mëposhtme ls.

# ls /etc/php*

Në Ubuntu 20.04, skedarët e konfigurimit PHP ndodhen në dosjen /etc/php// dhe skedarin e konfigurimit të paracaktuar PHP-FPM pool (www) është /etc/php//fpm/pool.d/www.conf:

$ ls /etc/php/7.4/

Konfigurimi i PHP-FPM për të dëgjuar në një fole domeni UNIX

Për të konfiguruar PHP-FPM për të dëgjuar në një prizë domeni UNIX, hapni skedarin tuaj të paracaktuar të konfigurimit të grupit PHP-FPM, duke përdorur redaktuesin tuaj të preferuar të tekstit.

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

Më pas kërkoni direktivën e dëgjimit dhe vendoseni në emrin e rrugës së skedarit të prizës së domenit UNIX si më poshtë. Vini re se shumica e instalimeve përdorin si parazgjedhje një prizë domeni UNIX.

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

Nëse përdorni një prizë domeni UNIX, duhet gjithashtu të vendosni lejet e duhura të leximit/shkrimit për skedarin, për të lejuar lidhjet nga serveri i uebit NGINX. Si parazgjedhje, NGINX funksionon si përdorues dhe grup nginx në CentOS/RHEL/Fedora dhe www-data në Ubuntu dhe Debian.

Pra, gjeni parametrat listen.owner dhe listen.group dhe vendosni ato në përputhje me rrethanat. Gjithashtu, vendosni modalitetin në 0660 duke përdorur parametrin listen.mode.

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

Vini re se nëse lejet në skedarin e folesë së domenit UNIX nuk janë vendosur saktë, NGINX mund të kthejë një gabim të keq të portës.

Konfigurimi i PHP-FPM për të dëgjuar në një fole TCP/IP

Edhe pse një prizë domeni UNIX është më e shpejtë se një fole TCP/IP, e para është më pak e shkallëzueshme, sepse mund të mbështesë vetëm komunikimin ndër-procesor në të njëjtin OS. Nëse NGINX dhe serveri i aplikacionit backend (PHP-FPM) funksionojnë në sisteme të ndryshme, do t'ju duhet të konfiguroni PHP-FPM për të dëgjuar në një prizë TCP/IP për lidhje.

Në skedarin e konfigurimit të grupit PHP-FPM, vendosni adresën dëgjo si më poshtë. Sigurohuni që porti që keni zgjedhur të mos përdoret nga një proces ose shërbim tjetër në të njëjtin sistem.

listen = 127.0.0.1:3000

Konfigurimi i NGINX për të punuar me serverin e aplikacionit PHP-FPM

Pasi të keni konfiguruar adresën në të cilën dëgjon PHP-FPM, duhet të konfiguroni NGINX për të kërkuar proxy për të nëpërmjet asaj adrese, duke përdorur parametrin e konfigurimit fastcgi_pass, në një skedar konfigurimi të bllokut të serverit virtual.

Për shembull, nëse skedari i konfigurimit për faqen tuaj të internetit është /etc/nginx/conf.d/example.com.conf, hapeni atë për modifikim.

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

Kërkoni bllokun location për përpunimin e skedarëve .php dhe vendosni parametrin fastcgi_pass si më poshtë, nëse keni konfiguruar PHP-FPM për të dëgjuar në një UNIX fole domeni.

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

Ose përdorni një adresë TCP/IP nëse keni konfiguruar PHP-FPM për të dëgjuar në një prizë TCP/IP. Nëse serveri i aplikacionit backend (PHP-FPM) funksionon në një server të veçantë (zëvendësoni 10.42.0.10 me adresën IP të makinës në të cilën funksionon serveri PHP-FPM FastCGI).

fastcgi_pass  10.42.0.10:3000;

E rëndësishme: Në CentOS 8, PHP-FPM përcaktohet si një server në rrjedhën e sipërme në skedarin /etc/nginx/conf.d/php-fpm.conf, brenda një blloku në rrjedhën e sipërme, me emrin php-fpm.

Ju mund të bëni ndryshime këtu në përputhje me rrethanat në varësi të adresës që PHP-FPM është konfiguruar për të dëgjuar, në skedarin e konfigurimit të pishinës. Konfigurimi i paracaktuar tregon në një prizë domeni UNIX.

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

dhe në skedarin e bllokut të serverit të faqes suaj, thjesht vendosni parametrin fastcgi_pass siç tregohet.

fastcgi_pass php-fpm;

Pasi të keni bërë ndryshime në konfigurimet PHP-FPM dhe NGINX, kontrolloni sintaksën e tyre të konfigurimit për korrektësi si më poshtë.

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

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

Ndërsa dalja e komandës tregon vetëm skedarin kryesor të konfigurimit, të gjithë skedarët e tjerë të konfigurimit përfshihen dhe kontrollohen gjithashtu.

Më pas, duhet të rinisni të dy shërbimet për të aplikuar ndryshimet, duke përdorur komandën 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

Nëse keni ndonjë gabim, mund të kontrolloni skedarët e regjistrit NGINX dhe PHP-FPM duke përdorur komandën 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

Kjo është gjithçka që kishim për ju. Seksioni i komenteve më poshtë mund të përdoret për të bërë pyetje. Për më shumë informacion, shihni dokumentacionin PHP-FPM.