Yadda ake Haɗa NGINX zuwa PHP-FPM Ta amfani da UNIX ko TCP/IP Socket


NGINX sabar yanar gizo (azaman wakili na baya) yana hidimar aikace-aikacen PHP ta hanyar yarjejeniyar FastCGI (azaman uwar garken aikace-aikacen baya). NGINX yana amfani da PHP-FPM (FastCGI Process Manager), madadin aiwatar da PHP FastCGI wanda ke gudana a bango azaman mai girma, yana sauraron buƙatun CGI. Ya zo tare da ƙarin fasalulluka waɗanda aka tsara don ƙarfafa tashar yanar gizo mai ɗora nauyi ko aikace-aikacen yanar gizo, amma ana iya amfani da shi don rukunin yanar gizo kowane irin girma.

Ba wai kawai PHP-FPM ke tallafawa daidaitawar wuraren waha na FastCGI ba, amma yana inganta da yawa daga cikin FastCGI na ciki kuma yana haɓaka rahoton kuskure, dakatar da rubutun, da ƙari. Yana fasalta lalatawar PHP, gudanar da tsari, yawan adadin matakai wanda buƙatu zasu iya zuwa, taken kuskure, saurin tallafi, da ƙari.

Don karɓar buƙatun FastCGI daga NGINX, PHP-FPM na iya ko dai saurara a kan ramin TCP/IP ko soket ɗin yankin UNIX. Duk adireshin da kuka zaba don amfani shine abin da NGINX yayi amfani dashi don haɗawa (buƙatun wakili) zuwa PHP-FPM, ta amfani da umarnin fastcgi_pass .

Wannan jagorar yana bayanin yadda ake saita NGINX zuwa sabar aikace-aikacen PHP ta amfani da PHP-FPM. Yana bayanin lokacin amfani da TCP/IP soket ko UNIX yankin soket don haɗa NGINX zuwa PHP-FPM kuma me yasa.

Wannan jagorar yana ɗauka cewa kuna da NGINX da PHP-FPM akan tsarin Linux ɗinku, in ba haka ba, duba:

  • Yadda ake Shigar da Sabo na LEMP akan CentOS 8
  • Yadda ake Shigar LEMP tari PhpMyAdmin a Ubuntu Server 20.04
  • Yadda ake Shigar NGINX, MySQL/MariaDB, da PHP akan RHEL 8
  • Yadda ake Shigar LEMP akan Debian 10 Server

UNIX yanki (ko IPC) kwasfa hanya ce ta sadarwa tsakanin-tsari (IPC) wanda ke ba da damar musayar bayanai mai inganci tsakanin hanyoyin da suke gudana akan tsarin aiki ɗaya yayin da TCP/IP (ko Internet Domain) sockets suna ba da damar aiwatarwa don sadarwa akan hanyar sadarwa.

Sabanin TCP/IP soket wanda ke gano uwar garke ta adireshin IP da tashar jiragen ruwa (misali 127.0.0.1:9000), zaku iya ɗaura sabar zuwa soket ɗin yankin UNIX ta amfani da sunan hanyar fayil (misali/run/php-fpm/www. sock), wanda yake bayyane a cikin tsarin fayiloli.

A UNIX yankin soket wani nau'i ne na musamman na fayil - fayil da izini izini ana amfani da shi (kamar yadda lamarin yake tare da kowane nau'in fayil na UNIX) kuma ana iya amfani dashi don ƙuntata wane tsari akan mai masaukin zai iya karantawa da rubutawa ga fayil ɗin, (kuma ta haka ne sadarwa tare da uwar garken baya).

Wannan hanyar, wani soket din yanki na UNIX amintacce ne saboda kawai aiwatarwa akan mai gida zai iya amfani da shi. Mayila za a iya fallasa soket na TCP/IP zuwa intanet wanda ke da haɗarin tsaro sai dai idan an aiwatar da ƙarin matakan tsaro kamar ta bango.

Mahimmanci, yin amfani da soket ɗin yanki na UNIX ba daidai yake da amfani da soket ɗin TCP/IP game da aiki ba, gwaje-gwaje da alamomi da yawa sun tabbatar da ɗakunan yanki na UNIX da sauri. Babbar matsalar da ke cikin kwandunan yankin UNIX ita ce cewa ba za su iya daidaitawa ba, kawai suna tallafawa sadarwa ne tsakanin tsarin aiki iri daya (OS).

Kuna iya saita adireshin PHP-FPM yana saurara a cikin fayil ɗin daidaitawar tafkin tafki. Lura cewa tare da PHP-FPM, zaku iya gudanar da tafki da yawa na tsari tare da saituna daban. Tsohuwar tafkin ana kiranta www .

Wurin fayil na tsarin samar da kayan kwalliyar ruwa ya dogara da hanyar da aka sanya PHP da PHP-FPM akan tsarin Linux (ko tsoho ne/sigar guda ɗaya ko iri iri iri ɗaya).

Misali, a kan CentOS 8, tare da sigar guda, duk fayilolin sanyi na PHP suna cikin kundin adireshin /sauransu kuma tsoho PHP-FPM pool (www) sanyi fayil shine /etc/php-fpm.d/www.conf:

Don lissafa duk fayilolin sanyi na PHP, yi amfani da umarnin ls mai zuwa.

# ls /etc/php*

A kan Ubuntu 20.04, fayilolin sanyi na PHP suna cikin adireshin /etc/php// da kuma tsoho wurin PHP-FPM pool (www) fayil ɗin daidaitawa shine /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

Saitin PHP-FPM don Saurari akan Wurin Wurin UNIX

Don saita PHP-FPM don saurara akan bututun yanki na UNIX, buɗe tsoffin fayil ɗin sanyi na PHP-FPM, ta amfani da editan rubutun da kuka fi so.

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

Bayan haka sai a nemi umarnin saurara kuma saita shi zuwa sunan fayil ɗin sunan soket ɗin yankin UNIX kamar haka. Lura cewa yawancin shigarwa suna amfani da soket ɗin yanki ta UNIX ta tsohuwa.

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

Idan kayi amfani da soket din yanki na UNIX, kai ma kana buƙatar saita izinin/karanta izini masu dacewa don fayil ɗin, don ba da damar haɗi daga sabar yanar gizo ta NGINX. Ta hanyar tsoho, NGINX yana gudana azaman mai amfani da nginx a kan CentOS/RHEL/Fedora da www-data akan Ubuntu da Debian.

Don haka, nemo sigogin mai saurare.code> da saurare.group sigogi kuma saita su yadda yakamata. Hakanan, saita yanayin zuwa 0660 ta amfani da listen.mode siga.

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

Lura cewa idan ba a saita izini a kan fayil ɗin soket ɗin yankin UNIX daidai ba, NGINX na iya dawo da kuskuren ƙofa mara kyau.

Harhadawar PHP-FPM don Saurari akan TCP/IP Soket

Kodayake bututun yanki na UNIX ya fi soket ɗin TCP/IP sauri, tsohon ba shi da nauyi, saboda kawai yana iya tallafawa sadarwa tsakanin tsarin OS ɗin ɗaya. Idan NGINX da sabar aikace-aikacen backend (PHP-FPM) suna gudana akan tsarin daban, dole ne ku saita PHP-FPM don saurara akan bututun TCP/IP don haɗi.

A cikin fayil ɗin daidaitawar tafkin PHP-FPM, saita adireshin saurare kamar haka. Tabbatar cewa tashar ba ta amfani da wani tsari ko sabis a kan wannan tsarin.

listen = 127.0.0.1:3000

Saitin NGINX don aiki tare da Sabis ɗin Aikace-aikacen PHP-FPM

Da zarar kun saita adireshin PHP-FPM yana saurara, kuna buƙatar saita NGINX don buƙatar wakili zuwa gare shi ta wannan adireshin, ta amfani da ma'aunin daidaitawa fastcgi_pass , a cikin fayil ɗin daidaita tsarin toshe sabar.

Misali, idan fayil din tsarin gidan yanar gizon ka /etc/nginx/conf.d/example.com.conf, bude shi don gyara.

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

Nemi wurin wuri toshe don aiki .php fayiloli kuma saita saitin fastcgi_pass kamar haka, idan kun saita PHP-FPM don saurara akan UNIX yankin soket.

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

Ko amfani da adireshin TCP/IP idan kun saita PHP-FPM don saurara akan bututun TCP/IP. Idan uwar garken aikace-aikacen bayan fage (PHP-FPM) yana gudana a kan wani sabar daban (maye gurbin 10.42.0.10 tare da adireshin IP na na'ura wanda akan sabar PHP-FPM FastCGI yake gudana).

fastcgi_pass  10.42.0.10:3000;

Mahimmi: A kan CentOS 8, PHP-FPM an bayyana shi azaman sabar da ke sama a cikin fayil din /etc/nginx/conf.d/php-fpm.conf, a cikin wani katafaren yanki, tare da sunan php-fpm.

Kuna iya yin canje-canje a nan daidai da dogaro da adireshin da aka tsara PHP-FPM don saurara, a cikin fayil ɗin daidaitawar tafkin. Tsarin tsoho yana nuni zuwa soket ɗin yankin UNIX.

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

kuma a cikin fayil ɗin sabar toshewar sabarku, kawai saita saitin fastcgi_pass kamar yadda aka nuna.

fastcgi_pass php-fpm;

Bayan kayi canje-canje ga abubuwan daidaitawa na PHP-FPM da NGINX, saika duba tsarin daidaitawar su domin yin daidai kamar haka.

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

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

Yayinda fitowar umarni ke nuna babban fayil ɗin daidaitawa kawai, duk sauran fayilolin sanyi an haɗa su kuma an bincika su ma.

Na gaba, kuna buƙatar sake farawa ayyukan biyu don amfani da canje-canje, ta amfani da umarnin 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

Idan kun sami wani kuskure, zaku iya bincika fayilolin rajista na NGINX da PHP-FPM ta amfani da umarnin 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

Abin da muke da shi kenan. Ana iya amfani da sashin sharhin da ke ƙasa don yin tambayoyi. Don ƙarin bayani, duba takaddun PHP-FPM.