Kā savienot NGINX ar PHP-FPM, izmantojot UNIX vai TCP/IP ligzdu


NGINX tīmekļa serveris (kā apgrieztais starpniekserveris) apkalpo PHP lietojumprogrammas, izmantojot FastCGI protokolu (kā aizmugures lietojumprogrammu serveris). NGINX izmanto PHP-FPM (FastCGI Process Manager), alternatīvu PHP FastCGI ieviešanu, kas darbojas fonā kā dēmons, klausoties CGI pieprasījumus. Tam ir papildu funkcijas, kas paredzētas intensīvi noslogotu vietņu vai tīmekļa lietojumprogrammu darbināšanai, taču tās var izmantot jebkura lieluma vietnēm.

PHP-FPM ne tikai atbalsta FastCGI resursu kopu konfigurāciju, bet arī uzlabo daudzus FastCGI iekšējos un palielina kļūdu ziņošanu, skriptu pārtraukšanu un daudz ko citu. Tajā ir PHP daemonizācija, procesu pārvaldība, dinamisks procesu skaits, no kuriem var rasties pieprasījumi, kļūdas galvene, paātrināts augšupielādes atbalsts un daudz kas cits.

Lai pieņemtu FastCGI pieprasījumus no NGINX, PHP-FPM var klausīties TCP/IP ligzdā vai UNIX domēna ligzdā. Neatkarīgi no izvēlētās adreses NGINX izmanto, lai izveidotu savienojumu (starpniekservera pieprasījumus) ar PHP-FPM, izmantojot fastcgi_pass direktīvu.

Šajā rokasgrāmatā ir paskaidrots, kā konfigurēt NGINX servera PHP lietojumprogrammām, izmantojot PHP-FPM. Tajā aprakstīts, kad NGINX un PHP-FPM savienošanai jāizmanto TCP/IP ligzda vai UNIX domēna ligzda.

Šajā rokasgrāmatā tiek pieņemts, ka jūsu Linux sistēmā ir instalēti NGINX un PHP-FPM, pretējā gadījumā skatiet:

  • Kā instalēt LEMP serveri CentOS 8
  • Kā instalēt LEMP skursteni PhpMyAdmin Ubuntu 20.04 serverī
  • Kā RHEL 8 instalēt NGINX, MySQL/MariaDB un PHP
  • Kā instalēt LEMP Debian 10 serverī

UNIX domēna (vai IPC) ligzdas ir starpprocesu komunikācijas (IPC) līdzeklis, kas nodrošina efektīvu datu apmaiņu starp procesiem, kas darbojas vienā operētājsistēmā, savukārt TCP/IP (vai interneta domēna) ligzdas ļauj procesiem sazināties tīklā.

Atšķirībā no TCP/IP ligzdas, kas serveri identificē pēc IP adreses un porta (piemēram, 127.0.0.1:9000), serveri var piesaistīt UNIX domēna ligzdai, izmantojot faila ceļa nosaukumu (piem.,/Run/php-fpm/www. zeķe), kas ir redzams failu sistēmā.

UNIX domēna ligzda ir īpašs faila veids - uz to attiecas failu un direktoriju atļaujas (tāpat kā jebkura cita veida UNIX faila gadījumā), un to var izmantot, lai ierobežotu to, kuri resursdatora procesi var lasīt un rakstīt failā, (un tādējādi sazināties ar aizmugures serveri).

Tādā veidā UNIX domēna ligzda ir droša, jo to var izmantot tikai vietējā resursdatora procesi. TCP/IP ligzda var tikt pakļauta internetam, kas rada drošības risku, ja vien netiek ieviesti papildu drošības pasākumi, piemēram, ugunsmūris.

Svarīgi ir tas, ka UNIX domēna ligzdas izmantošana nav tāda pati kā TCP/IP ligzdas izmantošana attiecībā uz veiktspēju. Vairāki testi un etaloni ir pierādījuši, ka UNIX domēna ligzdas ir ātrākas. UNIX domēnu ligzdu galvenais trūkums ir tas, ka tās ir mazāk mērogojamas, tās atbalsta tikai starpprocesu komunikāciju tajā pašā operētājsistēmā (OS).

Resursu kopas konfigurācijas failā varat konfigurēt adresi, kuru klausās PHP-FPM. Ņemiet vērā, ka, izmantojot PHP-FPM, jūs varat palaist vairākus procesu kopus ar dažādiem iestatījumiem. Noklusējuma kopa tiek saukta www .

Resursu kopas konfigurācijas faila atrašanās vieta ir atkarīga no tā, kā PHP un PHP-FPM tiek instalēti Linux sistēmā (neatkarīgi no tā, vai tā ir noklusējuma/viena versija vai vairākas versijas vienlaikus).

Piemēram, CentOS 8 ar vienu versiju visi PHP konfigurācijas faili atrodas direktorijā /etc un noklusējuma PHP-FPM baseina (www) konfigurācijas fails ir /etc/php-fpm.d/www.conf:

Lai uzskaitītu visus PHP konfigurācijas failus, izmantojiet šo komandu ls.

# ls /etc/php*

Ubuntu 20.04 versijā PHP konfigurācijas faili atrodas direktorijā /etc/php// un noklusējuma PHP-FPM baseina (www) konfigurācijas failā. ir /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

PHP-FPM konfigurēšana, lai klausītos UNIX domēna ligzdā

Lai konfigurētu PHP-FPM, lai klausītos UNIX domēna kontaktligzdā, atveriet noklusējuma PHP-FPM kopas konfigurācijas failu, izmantojot iecienīto teksta redaktoru.

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

Pēc tam meklējiet klausīšanās direktīvu un iestatiet to uz UNIX domēna ligzdas faila ceļa nosaukumu šādi. Ņemiet vērā, ka lielākajā daļā instalāciju pēc noklusējuma tiek izmantota UNIX domēna ligzda.

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

Ja izmantojat UNIX domēna ligzdu, failam ir jāiestata arī atbilstošas lasīšanas/rakstīšanas atļaujas, lai atļautu savienojumus no NGINX tīmekļa servera. Pēc noklusējuma NGINX darbojas kā lietotāja un grupas nginx uz CentOS/RHEL/Fedora un www-datiem uz Ubuntu un Debian.

Tātad atrodiet parametrus listen.owner un listen.group un attiecīgi iestatiet tos. Izmantojot parametru listen.mode , iestatiet arī režīmu 0660.

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

Ņemiet vērā, ka, ja atļaujas UNIX domēna kontaktligzdas failam nav iestatītas pareizi, NGINX var atgriezt nepareizas vārtejas kļūdu.

PHP-FPM konfigurēšana, lai klausītos TCP/IP ligzdā

Lai gan UNIX domēna ligzda ir ātrāka nekā TCP/IP ligzda, pirmā ir mazāk mērogojama, jo tā var atbalstīt tikai starpprocesu komunikāciju tajā pašā OS. Ja NGINX un aizmugures lietojumprogrammas serveris (PHP-FPM) darbojas dažādās sistēmās, jums būs jākonfigurē PHP-FPM, lai klausītos savienojumus TCP/IP ligzdā.

PHP-FPM kopas konfigurācijas failā iestatiet adresi listen šādi. Pārliecinieties, vai izvēlēto portu neizmanto cits process vai pakalpojums tajā pašā sistēmā.

listen = 127.0.0.1:3000

NGINX konfigurēšana darbam ar PHP-FPM lietojumprogrammu serveri

Kad esat konfigurējis adresi, kuru klausās PHP-FPM, virtuālā servera bloka konfigurācijas failā ir jākonfigurē NGINX tā starpniekservera pieprasījumam, izmantojot šo adresi, izmantojot konfigurācijas parametru fastcgi_pass .

Piemēram, ja jūsu vietnes konfigurācijas fails ir /etc/nginx/conf.d/example.com.conf, atveriet to rediģēšanai.

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

Meklējiet location bloku .php failu apstrādei un iestatiet parametru fastcgi_pass šādi, ja esat konfigurējis PHP-FPM, lai klausītos UNIX domēna ligzda.

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

Vai arī izmantojiet TCP/IP adresi, ja esat konfigurējis PHP-FPM, lai klausītos TCP/IP ligzdā. Ja aizmugures lietojumprogrammas serveris (PHP-FPM) darbojas atsevišķā serverī (aizstājiet 10.42.0.10 ar tās mašīnas IP adresi, kurā darbojas PHP-FPM FastCGI serveris).

fastcgi_pass  10.42.0.10:3000;

Svarīgi: CentOS 8 PHP-FPM ir definēts kā augšupējais serveris failā /etc/nginx/conf.d/php-fpm.conf augšpusē esošajā blokā ar nosaukumu php-fpm.

Šeit var attiecīgi veikt izmaiņas atkarībā no adreses, kuru PHP-FPM ir konfigurēta klausīties, pūla konfigurācijas failā. Noklusējuma konfigurācija norāda uz UNIX domēna ligzdu.

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

un vietnes servera bloķēšanas failā vienkārši iestatiet parametru fastcgi_pass , kā parādīts.

fastcgi_pass php-fpm;

Pēc izmaiņu veikšanas PHP-FPM un NGINX konfigurācijās pārbaudiet to konfigurācijas sintakses pareizību šādi.

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

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

Kaut arī komandas izvade parāda tikai galveno konfigurācijas failu, visi pārējie konfigurācijas faili ir iekļauti un pārbaudīti, kā arī.

Pēc tam, lai lietotu izmaiņas, jums ir jārestartē abi pakalpojumi, izmantojot komandu 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

Ja rodas kādas kļūdas, varat pārbaudīt NGINX un PHP-FPM žurnālfailus, izmantojot komandu 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

Tas jums bija viss. Zemāk esošo komentāru sadaļu var izmantot, lai uzdotu jautājumus. Lai iegūtu papildinformāciju, skatiet PHP-FPM dokumentāciju.