Kako povezati NGINX s PHP-FPM z uporabo vtičnice UNIX ali TCP/IP


Spletni strežnik NGINX (kot povratni proxy) streže PHP aplikacijam prek protokola FastCGI (kot strežnik za začasne aplikacije). NGINX uporablja PHP-FPM (FastCGI Process Manager), alternativno izvedbo PHP FastCGI, ki deluje v ozadju kot demon in posluša zahteve CGI. Na voljo je z dodatnimi funkcijami, namenjenimi napajanju težkih spletnih mest ali spletnih aplikacij, vendar se lahko uporablja za spletna mesta katere koli velikosti.

PHP-FPM ne samo, da podpira konfiguracijo področij virov FastCGI, temveč tudi izboljšuje številne notranje elemente FastCGI in povečuje poročanje o napakah, zaključek skripta in še veliko več. Predstavlja demonizacijo PHP, upravljanje procesov, dinamično število procesov, iz katerih lahko prihajajo zahteve, glavo napak, podporo za pospešeno nalaganje in še več.

Za sprejem zahtev FastCGI s strani NGINX lahko PHP-FPM posluša v vtičnici TCP/IP ali vtičnici domene UNIX. Ne glede na naslov, ki ga izberete za uporabo, NGINX uporablja za povezavo (proxy zahteve) s PHP-FPM z uporabo direktive fastcgi_pass .

V tem priročniku je razloženo, kako konfigurirati NGINX na strežniške PHP aplikacije z uporabo PHP-FPM. Opisuje, kdaj uporabiti vtičnico TCP/IP ali vtičnico domene UNIX za povezavo NGINX s PHP-FPM in zakaj.

Ta priročnik predpostavlja, da imate v sistemu Linux nameščena NGINX in PHP-FPM, sicer glejte:

  • Kako namestiti strežnik LEMP na CentOS 8
  • Kako namestiti sklad LEMP PhpMyAdmin v strežnik Ubuntu 20.04
  • Kako namestiti NGINX, MySQL/MariaDB in PHP na RHEL 8
  • Kako namestiti LEMP na strežnik Debian 10

Vtičnice domene UNIX (ali IPC) so sredstvo za medprocesno komunikacijo (IPC), ki omogoča učinkovito izmenjavo podatkov med procesi, ki se izvajajo v istem operacijskem sistemu, medtem ko vtičnice TCP/IP (ali internetna domena) omogočajo komunikacijo procesov prek omrežja.

Za razliko od vtičnice TCP/IP, ki strežnik identificira po naslovu IP in vratih (npr. 127.0.0.1:9000), lahko strežnik povežete z vtičnico domene UNIX z imenom poti datoteke (npr./Run/php-fpm/www. sock), ki je viden v datotečnem sistemu.

Vtičnica domene UNIX je posebna vrsta datoteke - zanjo veljajo dovoljenja za datoteke in imenike (kot v primeru katere koli druge vrste datoteke UNIX) in se lahko uporablja za omejitev, kateri procesi na gostitelju lahko berejo in pišejo v datoteko, (in s tem komunicirati z zalednim strežnikom).

Na ta način je vtičnica domene UNIX varna, ker jo lahko uporabljajo samo procesi na lokalnem gostitelju. Vtičnica TCP/IP je lahko izpostavljena internetu, ki predstavlja varnostno tveganje, razen če se izvajajo dodatni varnostni ukrepi, kot je požarni zid.

Pomembno je, da uporaba vtičnice domene UNIX ni enaka kot uporaba vtičnice TCP/IP glede zmogljivosti. Številni testi in merila uspešnosti so dokazali, da so vtičnice domene UNIX hitrejše. Glavna pomanjkljivost vtičnic domen UNIX je, da so manj razširljive in podpirajo samo medprocesno komunikacijo znotraj istega operacijskega sistema (OS).

Naslov, ki ga posluša PHP-FPM, lahko konfigurirate v konfiguracijski datoteki vira. Upoštevajte, da lahko s PHP-FPM zaženete več skupin procesov z različnimi nastavitvami. Privzeti bazen se imenuje www .

Lokacija konfiguracijske datoteke področja virov je odvisna od načina namestitve PHP in PHP-FPM v sistem Linux (ne glede na to, ali gre za privzeto/eno različico ali več različic hkrati).

Na primer, na CentOS 8, z eno različico, se vse konfiguracijske datoteke PHP nahajajo v imeniku /etc in privzeta konfiguracijska datoteka PHP-FPM pool (www) je /etc/php-fpm.d/www.conf:

Če želite navesti vse konfiguracijske datoteke PHP, uporabite naslednji ukaz ls.

# ls /etc/php*

V Ubuntu 20.04 so konfiguracijske datoteke PHP v imeniku /etc/php// in privzeti konfiguracijski datoteki PHP-FPM pool (www) je /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

Konfiguriranje PHP-FPM za poslušanje v vtičnici domene UNIX

Če želite konfigurirati PHP-FPM za poslušanje v vtičnici domene UNIX, odprite privzeto konfiguracijsko datoteko bazena PHP-FPM z vašim najljubšim urejevalnikom besedil.

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

Nato poiščite direktivo Listen in jo nastavite na ime datoteke datoteke vtičnice domene UNIX, kot sledi. Upoštevajte, da večina namestitev privzeto uporablja vtičnico domene UNIX.

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

Če uporabljate vtičnico domene UNIX, morate za datoteko nastaviti tudi ustrezna dovoljenja za branje/pisanje, da omogočite povezave s spletnega strežnika NGINX. NGINX privzeto deluje kot uporabniški in skupinski nginx na CentOS/RHEL/Fedora in www-data na Ubuntu in Debian.

Poiščite parametra listen.owner in listen.group ter jih ustrezno nastavite. Prav tako nastavite način na 0660 s parametrom 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

Če dovoljenja za datoteko vtičnice UNIX za domeno niso pravilno nastavljena, lahko NGINX vrne napako napake prehoda.

Konfiguriranje PHP-FPM za poslušanje v vtičnici TCP/IP

Čeprav je vtičnica domene UNIX hitrejša od vtičnice TCP/IP, je prva manj razširljiva, ker lahko podpira samo medprocesno komunikacijo na istem OS. Če se NGINX in zaledni strežnik aplikacij (PHP-FPM) izvajata v različnih sistemih, boste morali PHP-FPM konfigurirati za poslušanje povezav v vtičnici TCP/IP.

V konfiguracijski datoteki področja PHP-FPM nastavite naslov poslušaj na naslednji način. Prepričajte se, da izbranih vrat ne uporablja drug postopek ali storitev v istem sistemu.

listen = 127.0.0.1:3000

Konfiguriranje NGINX za delo s strežnikom aplikacij PHP-FPM

Ko konfigurirate naslov, ki ga PHP-FPM posluša, morate konfigurirati NGINX, da mu posreduje zahtevo prek tega naslova s konfiguracijskim parametrom fastcgi_pass v konfiguracijski datoteki bloka navideznega strežnika.

Če je na primer konfiguracijska datoteka za vaše spletno mesto /etc/nginx/conf.d/example.com.conf, jo odprite za urejanje.

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

Poiščite blok location za obdelavo datotek .php in nastavite parameter fastcgi_pass na naslednji način, če ste PHP-FPM konfigurirali za poslušanje v sistemu UNIX vtičnica domene.

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

Ali pa uporabite naslov TCP/IP, če ste PHP-FPM konfigurirali za poslušanje v vtičnici TCP/IP. Če se zaledni strežnik aplikacij (PHP-FPM) izvaja na ločenem strežniku (zamenjajte 10.42.0.10 z naslovom IP naprave, na kateri deluje strežnik PHP-FPM FastCGI).

fastcgi_pass  10.42.0.10:3000;

Pomembno: Na CentOS 8 je PHP-FPM definiran kot strežnik v strežniku v datoteki /etc/nginx/conf.d/php-fpm.conf v zgornjem bloku z imenom php-fpm.

Tu lahko ustrezno spremenite, odvisno od naslova, v katerem je PHP-FPM nastavljen za poslušanje, v konfiguracijski datoteki bazena. Privzeta konfiguracija kaže na vtičnico domene UNIX.

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

in v datoteki bloka strežnika spletnega mesta preprosto nastavite parameter fastcgi_pass , kot je prikazano.

fastcgi_pass php-fpm;

Ko spremenite konfiguracije PHP-FPM in NGINX, preverite pravilnost skladnje njihove konfiguracije, kot sledi.

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

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

Medtem ko izhodni ukaz prikazuje samo glavno konfiguracijsko datoteko, so vključene in preverjene tudi vse druge konfiguracijske datoteke.

Nato morate z uporabo ukaza systemctl znova zagnati dve storitvi, da uveljavite spremembe.

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

Če pride do kakršnih koli napak, lahko z ukazom cat preverite dnevniške datoteke NGINX in PHP-FPM.

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

To je vse, kar smo imeli za vas. Spodnji odsek za komentarje lahko uporabite za postavljanje vprašanj. Za več informacij glejte dokumentacijo PHP-FPM.