Jinsi ya Kuunganisha NGINX kwa PHP-FPM Kwa Kutumia UNIX au TCP/IP Soketi


Seva ya wavuti ya NGINX (kama wakala wa nyuma) hutumikia programu za PHP kupitia itifaki ya FastCGI (kama seva ya programu ya nyuma). NGINX inaajiri PHP-FPM (Kidhibiti Mchakato wa FastCGI), utekelezaji mbadala wa PHP FastCGI ambao unaendeshwa chinichini kama daemoni, ikisikiliza maombi ya CGI. Inakuja na vipengele vya ziada vilivyoundwa kwa ajili ya kuwezesha tovuti zenye mizigo mizito au programu za wavuti, lakini inaweza kutumika kwa tovuti za ukubwa wowote.

Sio tu kwamba PHP-FPM inasaidia usanidi wa mabwawa ya rasilimali ya FastCGI, lakini pia inaboresha wengi wa ndani wa FastCGI na huongeza kuripoti makosa, kusitishwa kwa hati, na mengi zaidi. Inaangazia unyanyasaji wa PHP, usimamizi wa mchakato, idadi inayobadilika ya michakato ambayo maombi yanaweza kutoka, kichwa cha hitilafu, usaidizi wa upakiaji ulioharakishwa, na zaidi.

Ili kukubali maombi ya FastCGI kutoka NGINX, PHP-FPM inaweza kusikiliza kwenye soketi ya TCP/IP au soketi ya kikoa cha UNIX. Anwani yoyote utakayochagua kutumia ndiyo ambayo NGINX hutumia kuunganisha (maombi ya seva mbadala) kwa PHP-FPM, kwa kutumia fastcgi_pass maelekezo.

Mwongozo huu unaelezea jinsi ya kusanidi NGINX kwa programu za PHP za seva kwa kutumia PHP-FPM. Inafafanua wakati wa kutumia tundu la TCP/IP au tundu la kikoa la UNIX kuunganisha NGINX kwa PHP-FPM na kwa nini.

Mwongozo huu unadhania kuwa una NGINX na PHP-FPM iliyosanikishwa kwenye mfumo wako wa Linux, vinginevyo, ona:

  • Jinsi ya Kusakinisha Seva ya LEMP kwenye CentOS 8
  • Jinsi ya kusakinisha rafu ya LEMP PhpMyAdmin katika Seva ya Ubuntu 20.04
  • Jinsi ya Kusakinisha NGINX, MySQL/MariaDB, na PHP kwenye RHEL 8
  • Jinsi ya Kusakinisha LEMP kwenye Seva ya Debian 10

Soketi za kikoa cha UNIX (au IPC) ni njia ya mawasiliano baina ya mchakato (IPC) ambayo huruhusu ubadilishanaji wa data unaofaa kati ya michakato inayoendeshwa kwenye mfumo huo wa uendeshaji huku soketi za TCP/IP (au Kikoa cha Mtandao) huruhusu michakato ya kuwasiliana kupitia mtandao.

Tofauti na tundu la TCP/IP ambalo hutambulisha seva kwa anwani ya IP na mlango (k.m. 127.0.0.1:9000), unaweza kufunga seva kwenye soketi ya kikoa cha UNIX kwa kutumia jina la njia la faili (k.m. /run/php-fpm/www. sock), ambayo inaonekana kwenye mfumo wa faili.

Soketi ya kikoa cha UNIX ni aina maalum ya faili - ruhusa za faili na saraka hutumika kwake (kama ilivyo kwa aina nyingine yoyote ya faili ya UNIX) na inaweza kutumika kuzuia ni michakato gani kwenye seva pangishi inaweza kusoma na kuandika kwa faili, (na kwa hivyo wasiliana na seva ya nyuma).

Kwa njia hii, soketi ya kikoa cha UNIX ni salama kwa sababu michakato kwenye seva pangishi ya ndani inaweza kuitumia. Soketi ya TCP/IP inaweza kuonyeshwa kwenye mtandao na kusababisha hatari ya usalama isipokuwa hatua za ziada za usalama kama vile ngome zitatekelezwa.

Muhimu, kutumia soketi ya kikoa cha UNIX si sawa na kutumia tundu la TCP/IP kuhusu utendakazi, majaribio kadhaa na vigezo vimethibitisha soketi za kikoa za UNIX kuwa za haraka zaidi. Upungufu kuu wa soketi za kikoa za UNIX ni kwamba haziwezekani sana, zinaunga mkono tu mawasiliano ya michakato kati ya mfumo wa uendeshaji sawa (OS).

Unaweza kusanidi anwani ambayo PHP-FPM inasikiza katika faili ya usanidi ya bwawa la rasilimali. Kumbuka kuwa kwa PHP-FPM, unaweza kuendesha vikundi kadhaa vya michakato na mipangilio tofauti. Dimbwi chaguo-msingi linaitwa www.

Mahali pa faili ya usanidi wa bwawa la rasilimali inategemea jinsi PHP na PHP-FPM zinavyosakinishwa kwenye mfumo wa Linux (iwe ni toleo-msingi/moja au matoleo mengi kwa wakati mmoja).

Kwa mfano, kwenye CentOS 8, yenye toleo moja, faili zote za usanidi wa PHP ziko kwenye saraka ya /etc na dimbwi chaguo-msingi la PHP-FPM (www) faili ya usanidi iko. /etc/php-fpm.d/www.conf:

Ili kuorodhesha faili zote za usanidi wa PHP, tumia ls amri ifuatayo.

# ls /etc/php*

Kwenye Ubuntu 20.04, faili za usanidi wa PHP ziko katika /etc/php// saraka na dimbwi chaguo-msingi la PHP-FPM (www) faili ya usanidi. ni /etc/php//fpm/pool.d/www.conf:

$ ls /etc/php/7.4/

Inasanidi PHP-FPM Ili Kusikiliza kwenye Soketi ya Kikoa cha UNIX

Ili kusanidi PHP-FPM isikilize kwenye soketi ya kikoa cha UNIX, fungua faili yako chaguomsingi ya usanidi wa PHP-FPM, ukitumia kihariri chako cha maandishi unachokipenda.

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

Kisha utafute maagizo ya kusikiliza na uiweke kwa njia ya faili ya tundu la kikoa la UNIX kama ifuatavyo. Kumbuka kuwa usakinishaji mwingi hutumia soketi ya kikoa cha UNIX kwa chaguo-msingi.

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

Ikiwa unatumia soketi ya kikoa cha UNIX, unahitaji pia kuweka ruhusa zinazofaa za kusoma/kuandika kwa faili, ili kuruhusu miunganisho kutoka kwa seva ya wavuti ya NGINX. Kwa chaguo-msingi, NGINX huendesha kama nginx ya mtumiaji na kikundi kwenye CentOS/RHEL/Fedora na www-data kwenye Ubuntu na Debian.

Kwa hivyo, pata vigezo vya listen.owner na listen.group na uviweke ipasavyo. Pia, weka modi kuwa 0660 kwa kutumia listen.mode parameta.

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

Kumbuka kwamba ikiwa ruhusa kwenye faili ya soketi ya kikoa cha UNIX haijawekwa ipasavyo, NGINX inaweza kurudisha hitilafu mbaya ya lango.

Inasanidi PHP-FPM ili Kusikiliza kwenye Soketi ya TCP/IP

Ingawa tundu la kikoa la UNIX lina kasi zaidi kuliko tundu la TCP/IP, la kwanza haliwezi kupanuka, kwa sababu linaweza tu kusaidia mawasiliano baina ya mchakato kwenye OS hiyo hiyo. Ikiwa NGINX na seva ya programu ya nyuma (PHP-FPM) zinafanya kazi kwenye mifumo tofauti, itabidi usanidi PHP-FPM ili kusikiliza kwenye tundu la TCP/IP kwa miunganisho.

Katika faili ya usanidi ya dimbwi la PHP-FPM, weka anwani ya sikiliza kama ifuatavyo. Hakikisha kwamba bandari uliyochagua haitumiwi na mchakato au huduma nyingine kwenye mfumo huo huo.

listen = 127.0.0.1:3000

Inasanidi NGINX kufanya kazi na Seva ya Maombi ya PHP-FPM

Baada ya kusanidi anwani ambayo PHP-FPM inasikiza, unahitaji kusanidi NGINX kwa ombi la seva mbadala kupitia anwani hiyo, kwa kutumia fastcgi_pass parameta ya usanidi, katika faili ya usanidi ya kuzuia seva.

Kwa mfano, ikiwa faili ya usanidi ya tovuti yako ni /etc/nginx/conf.d/example.com.conf, ifungue ili ihaririwe.

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

Tafuta kizuizi cha location cha kuchakata faili za .php na uweke kigezo cha fastcgi_pass kama ifuatavyo, ikiwa ulisanidi PHP-FPM kusikiliza kwenye UNIX. tundu la kikoa.

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

Au tumia anwani ya TCP/IP ikiwa ulisanidi PHP-FPM ili kusikiliza kwenye soketi ya TCP/IP. Ikiwa seva ya programu ya nyuma (PHP-FPM) inafanya kazi kwenye seva tofauti (badilisha 10.42.0.10 na anwani ya IP ya mashine ambayo seva ya PHP-FPM FastCGI inafanya kazi).

fastcgi_pass  10.42.0.10:3000;

Muhimu: Kwenye CentOS 8, PHP-FPM inafafanuliwa kama seva ya juu katika /etc/nginx/conf.d/php-fpm.conf faili, ndani ya kizuizi cha juu, kwa jina php-fpm.

Unaweza kufanya mabadiliko hapa ipasavyo kulingana na anwani PHP-FPM imesanidiwa kusikiliza, katika faili ya usanidi wa bwawa. Usanidi chaguo-msingi unaelekeza kwenye soketi ya kikoa cha UNIX.

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

na katika faili ya kuzuia seva ya tovuti yako, weka tu fastcgi_pass parameta kama inavyoonyeshwa.

fastcgi_pass php-fpm;

Baada ya kufanya mabadiliko kwa usanidi wa PHP-FPM na NGINX, angalia syntax yao ya usanidi kwa usahihi kama ifuatavyo.

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

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

Wakati pato la amri linaonyesha faili kuu ya usanidi pekee, faili zingine zote za usanidi zinajumuishwa na kuangaliwa pia.

Ifuatayo, unahitaji kuanzisha upya huduma mbili ili kutumia mabadiliko, kwa kutumia amri ya 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

Ukipata makosa yoyote, unaweza kuangalia faili za kumbukumbu za NGINX na PHP-FPM kwa kutumia amri ya paka.

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

Hayo ndiyo tu tuliyokuwa nayo kwa ajili yako. Sehemu ya maoni hapa chini inaweza kutumika kuuliza maswali. Kwa habari zaidi, angalia hati za PHP-FPM.