Kif Tqabbad NGINX ma 'PHP-FPM billi tuża UNIX jew TCP/IP Socket


NGINX web server (bħala reverse proxy) iservi applikazzjonijiet PHP permezz tal-protokoll FastCGI (bħala server ta 'applikazzjoni backend). NGINX timpjega PHP-FPM (FastCGI Process Manager), implimentazzjoni alternattiva ta 'PHP FastCGI li taħdem fl-isfond bħala daemon, jisma' talbiet CGI. Jiġi b'karatteristiċi żejda ddisinjati biex iħaddmu websajts jew applikazzjonijiet tal-web mgħobbija tqal, iżda jista 'jintuża għal siti ta' kull daqs.

PHP-FPM mhux biss jappoġġja l-konfigurazzjoni ta 'pools ta' riżorsi FastCGI, iżda jtejjeb ukoll ħafna mill-interni FastCGI u jżid ir-rappurtar ta 'żbalji, it-terminazzjoni tal-iskript, u ħafna aktar. Fiha demonizzazzjoni PHP, ġestjoni tal-proċess, numru dinamiku ta 'proċessi li minnhom jistgħu jiġu talbiet, header ta' żball, appoġġ aċċellerat ta 'upload, u aktar.

Biex taċċetta talbiet FastCGI minn NGINX, PHP-FPM jista 'jew jisma' fuq socket TCP/IP jew socket tad-dominju UNIX. Ikun xi jkun l-indirizz li tagħżel li tuża huwa dak li juża NGINX biex jgħaqqad (talbiet ta' proxy) ma' PHP-FPM, billi juża d-direttiva fastcgi_pass.

Din il-gwida tispjega kif tikkonfigura NGINX għal applikazzjonijiet PHP tas-server billi tuża PHP-FPM. Jiddeskrivi meta tuża socket TCP/IP jew socket tad-dominju UNIX biex tikkonnettja NGINX ma PHP-FPM u għaliex.

Din il-gwida tassumi li għandek NGINX u PHP-FPM installati fis-sistema Linux tiegħek, inkella, ara:

  • Kif Tinstalla LEMP Server fuq CentOS 8
  • Kif tinstalla l-munzell LEMP PhpMyAdmin f'Ubuntu 20.04 Server
  • Kif tinstalla NGINX, MySQL/MariaDB, u PHP fuq RHEL 8
  • Kif Tinstalla LEMP fuq Debian 10 Server

Is-sokits tad-dominju UNIX (jew IPC) huma mezz ta' komunikazzjoni bejn il-proċessi (IPC) li jippermettu skambju effiċjenti ta' data bejn proċessi li jaħdmu fuq l-istess sistema operattiva filwaqt li sockets TCP/IP (jew Internet Domain) jippermettu li l-proċessi jikkomunikaw fuq netwerk.

B'differenza socket TCP/IP li jidentifika server b'indirizz IP u port (eż. 127.0.0.1:9000), tista' torbot server ma' socket ta' dominju UNIX billi tuża isem tal-fajl (eż. /run/php-fpm/www. suletta), li hija viżibbli fis-sistema tal-fajls.

Socket tad-dominju UNIX huwa tip speċjali ta' fajl - il-permessi tal-fajl u tad-direttorju japplikaw għalih (kif inhu l-każ ma' kwalunkwe tip ieħor ta' fajl UNIX) u jista' jintuża biex jirrestrinġi liema proċessi fuq l-ospitant jistgħu jaqraw u jiktbu fil-fajl, (u għalhekk tikkomunika mas-server backend).

B'dan il-mod, socket tad-dominju UNIX huwa sigur minħabba li l-proċessi biss fuq il-host lokali jistgħu jużawh. Socket TCP/IP jista' jkun espost għall-internet li joħloq riskju għas-sigurtà sakemm ma jiġux implimentati miżuri ta' sigurtà żejda bħal firewall.

Importanti, l-użu ta 'socket tad-dominju UNIX mhuwiex l-istess bħall-użu ta' socket TCP/IP fir-rigward tal-prestazzjoni, diversi testijiet u punti ta 'referenza wrew li s-sokits tad-dominju UNIX huma aktar mgħaġġla. L-iżvantaġġ ewlieni tas-sokits tad-dominju UNIX huwa li huma inqas skalabbli, jappoġġjaw biss komunikazzjoni bejn il-proċessi fl-istess sistema operattiva (OS).

Tista' tikkonfigura l-indirizz li jisma' PHP-FPM f'fajl ta' konfigurazzjoni tal-ġabra tar-riżorsi. Innota li ma 'PHP-FPM, tista' tmexxi diversi gruppi ta 'proċessi b'settings differenti. Il-ġabra awtomatika tissejjaħ www.

Il-post tal-fajl tal-konfigurazzjoni tal-ġabra tar-riżorsi jiddependi fuq il-mod kif PHP u PHP-FPM huma installati fuq sistema Linux (kemm jekk hija default/verżjoni waħda jew verżjonijiet multipli simultanjament).

Pereżempju, fuq CentOS 8, b'verżjoni waħda, il-fajls kollha tal-konfigurazzjoni PHP jinsabu fid-direttorju /etc u l-fajl ta' konfigurazzjoni default PHP-FPM (www) huwa /etc/php-fpm.d/www.conf:

Biex telenka l-fajls kollha tal-konfigurazzjoni PHP, uża l-kmand ls li ġej.

# ls /etc/php*

Fuq Ubuntu 20.04, il-fajls tal-konfigurazzjoni PHP jinsabu fid-direttorju /etc/php// u l-fajl tal-konfigurazzjoni default PHP-FPM pool (www) huwa /etc/php//fpm/pool.d/www.conf:

$ ls /etc/php/7.4/

Konfigurazzjoni ta' PHP-FPM biex Isma' fuq Socket ta' Dominju UNIX

Biex tikkonfigura PHP-FPM biex tisma' fuq socket tad-dominju UNIX, iftaħ il-fajl tal-konfigurazzjoni tal-pool PHP-FPM default tiegħek, billi tuża l-editur tat-test favorit tiegħek.

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

Imbagħad fittex id-direttiva ta' isma' u poġġiha għall-isem tal-fajl tas-socket tad-dominju UNIX kif ġej. Innota li ħafna mill-installazzjonijiet jużaw socket tad-dominju UNIX b'mod awtomatiku.

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

Jekk tuża socket ta 'dominju UNIX, għandek bżonn ukoll li tissettja permessi xierqa ta' qari/kitba għall-fajl, biex tippermetti konnessjonijiet mis-server tal-web NGINX. B'mod awtomatiku, NGINX jaħdem bħala utent u grupp nginx fuq CentOS/RHEL/Fedora u www-data fuq Ubuntu u Debian.

Allura, sib il-parametri listen.owner u listen.group u waqqafhom kif xieraq. Ukoll, issettja l-mod għal 0660 billi tuża l-parametru 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

Innota li jekk il-permessi fuq il-fajl tas-socket tad-dominju UNIX ma jkunux issettjati b'mod korrett, NGINX jista 'jirritorna żball ħażin tal-gateway.

Konfigurazzjoni ta' PHP-FPM biex Isma' fuq Socket TCP/IP

Għalkemm socket tad-dominju UNIX huwa aktar mgħaġġel minn socket TCP/IP, tal-ewwel huwa inqas skalabbli, minħabba li jista 'jappoġġa biss komunikazzjoni bejn il-proċessi fuq l-istess OS. Jekk NGINX u s-server ta 'applikazzjoni backend (PHP-FPM) qed jaħdmu fuq sistemi differenti, ikollok tikkonfigura PHP-FPM biex tisma' fuq socket TCP/IP għall-konnessjonijiet.

Fil-fajl tal-konfigurazzjoni tal-pool PHP-FPM, issettja l-indirizz isma kif ġej. Kun żgur li l-port li għażilt mhux qed jintuża minn proċess jew servizz ieħor fuq l-istess sistema.

listen = 127.0.0.1:3000

Konfigurazzjoni ta 'NGINX biex taħdem ma' PHP-FPM Application Server

Ladarba tkun ikkonfigurat l-indirizz li jisma 'PHP-FPM fuq, għandek bżonn tikkonfigura NGINX biex titlob prokura għalih permezz ta' dak l-indirizz, billi tuża l-parametru ta 'konfigurazzjoni fastcgi_pass, f'fajl ta' konfigurazzjoni ta 'blokk ta' server virtwali.

Pereżempju, jekk il-fajl tal-konfigurazzjoni għall-websajt tiegħek huwa /etc/nginx/conf.d/example.com.conf, iftaħ għall-editjar.

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

Fittex il-blokk location għall-ipproċessar ta' fajls .php u waqqaf il-parametru fastcgi_pass kif ġej, jekk ikkonfigurajt PHP-FPM biex tisma' fuq UNIX socket tad-dominju.

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

Jew uża indirizz TCP/IP jekk ikkonfigurajt PHP-FPM biex tisma' fuq socket TCP/IP. Jekk is-server tal-applikazzjoni backend (PHP-FPM) qed jaħdem fuq server separat (issostitwixxi 10.42.0.10 bl-indirizz IP tal-magna li fuqha qed jaħdem is-server PHP-FPM FastCGI).

fastcgi_pass  10.42.0.10:3000;

Importanti: Fuq CentOS 8, PHP-FPM huwa definit bħala server upstream fil-fajl /etc/nginx/conf.d/php-fpm.conf, fi ħdan blokka upstream, bl-isem php-fpm.

Tista 'tagħmel bidliet hawn kif xieraq skond l-indirizz PHP-FPM huwa kkonfigurat biex jisma' fuq, fil-fajl tal-konfigurazzjoni tal-pool. Il-konfigurazzjoni default tipponta lejn socket tad-dominju UNIX.

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

u fil-fajl tal-blokk tas-server tas-sit tiegħek, sempliċement issettja l-parametru fastcgi_pass kif muri.

fastcgi_pass php-fpm;

Wara li tagħmel bidliet fil-konfigurazzjonijiet PHP-FPM u NGINX, iċċekkja s-sintassi tal-konfigurazzjoni tagħhom għall-korrettezza kif ġej.

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

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

Filwaqt li l-output tal-kmand juri biss il-fajl tal-konfigurazzjoni prinċipali, il-fajls tal-konfigurazzjoni l-oħra kollha huma inklużi u kkontrollati wkoll.

Sussegwentement, għandek bżonn terġa 'tibda ż-żewġ servizzi biex tapplika l-bidliet, billi tuża l-kmand 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

Jekk ikollok xi żbalji, tista 'tiċċekkja l-fajls log NGINX u PHP-FPM billi tuża l-kmand tal-qtates.

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

Dak kollu li kellna għalik. It-taqsima tal-kummenti hawn taħt tista’ tintuża biex tistaqsi mistoqsijiet. Għal aktar informazzjoni, ara d-dokumentazzjoni PHP-FPM.