Kako spojiti NGINX na PHP-FPM koristeći UNIX ili TCP/IP utičnicu


NGINX web poslužitelj (kao obrnuti proxy) poslužuje PHP aplikacije putem FastCGI protokola (kao backend aplikacijski poslužitelj). NGINX koristi PHP-FPM (FastCGI Process Manager), alternativnu implementaciju PHP FastCGI koja radi u pozadini kao demon, osluškujući CGI zahtjevi. Dolazi s dodatnim značajkama dizajniranim za pokretanje jako opterećenih web stranica ili web aplikacija, ali se može koristiti za web stranice bilo koje veličine.

Ne samo da PHP-FPM podržava konfiguraciju skupova resursa FastCGI, već također poboljšava mnoge interne elemente FastCGI i povećava izvješćivanje o pogreškama, skriptu raskid, i još mnogo toga. Sadrži demonizaciju PHP-a, upravljanje procesima, dinamički broj procesa iz kojih mogu doći zahtjevi, zaglavlje pogreške, podršku za ubrzani prijenos i još mnogo toga.

Za prihvaćanje FastCGI zahtjeva od NGINX, PHP-FPM može slušati na TCP/IP utičnici ili UNIX domeni utičnica. Koju god adresu odaberete koristiti je ono što NGINX koristi za povezivanje (proxy zahtjevi) na PHP-FPM, koristeći direktivu fastcgi_pass.

Ovaj vodič objašnjava kako konfigurirati NGINX za poslužitelj PHP aplikacija pomoću PHP-FPM. Opisuje kada koristiti TCP/IP utičnicu ili UNIX domensku utičnicu za povezivanje NGINX na PHP-FPM i zašto.

Ovaj vodič pretpostavlja da na vašem Linux sustavu imate instaliran NGINX i PHP-FPM, inače pogledajte:

  • Kako instalirati LEMP poslužitelj na CentOS 8
  • Kako instalirati LEMP stack PhpMyAdmin u Ubuntu 20.04 poslužitelju
  • Kako instalirati NGINX, MySQL/MariaDB i PHP na RHEL 8
  • Kako instalirati LEMP na Debian 10 Server

Što bih trebao koristiti: UNIX Domain Socket ili TCP/IP Socket?

UNIX domene (ili IPC) utičnice su sredstva međuprocesne komunikacije (IPC) koja omogućuju učinkovitu razmjenu podataka između procesa koji se izvode na istom operativnom sustavu dok je TCP /IP (ili Internetska domena) utičnice omogućuju procesima komunikaciju preko mreže.

Za razliku od TCP/IP utičnice koja identificira poslužitelj prema IP adresi i priključku (npr. 127.0.0.1:9000), možete vezati poslužitelj na utičnicu UNIX domene koristeći put do datoteke (npr. /run/php-fpm/www.sock), koji je vidljiv u datotečnom sustavu.

Utičnica UNIX domene posebna je vrsta datoteke – dopuštenja datoteke i direktorija primjenjuju se na nju (kao što je slučaj sa bilo kojom drugom vrstom UNIX datoteke) i može se koristiti za ograničavanje procesa na glavnom računalu koji mogu čitati i pisati u datoteku, (i na taj način komuniciraju s pozadinskim poslužiteljem).

Na ovaj način, utičnica UNIX domene je sigurna jer je mogu koristiti samo procesi na lokalnom računalu. TCP/IP utičnica može biti izložena internetu i predstavljati sigurnosni rizik osim ako se ne implementiraju dodatne sigurnosne mjere poput vatrozida.

Važno je da korištenje UNIX utičnice domene nije isto što i korištenje TCP/IP utičnice u pogledu performansi, nekoliko testova i referentnih vrijednosti pokazalo je da su utičnice UNIX domene brže. Glavni nedostatak UNIX domenskih utičnica je da su manje skalabilni, podržavaju samo međuprocesnu komunikaciju unutar istog operativnog sustava (OS).

Gdje mogu konfigurirati PHP-FPM adresu slušanja?

Možete konfigurirati adresu koju PHP-FPM sluša u konfiguracijskoj datoteci skupa resursa. Imajte na umu da s PHP-FPM možete pokrenuti nekoliko skupova procesa s različitim postavkama. Zadani skup naziva se www.

Lokacija konfiguracijske datoteke skupa resursa ovisi o načinu na koji su PHP i PHP-FPM instalirani na Linux sustav (bilo da se radi o zadanoj/jednoj verziji ili više verzija istovremeno) .

Na primjer, na CentOS 8, s jednom verzijom, sve PHP konfiguracijske datoteke nalaze se u /etc direktoriju i zadanom PHP-FPM konfiguracijska datoteka bazena (www) je /etc/php-fpm.d/www.conf:

Za popis svih PHP konfiguracijskih datoteka upotrijebite sljedeću naredbu ls.

ls /etc/php*

Na Ubuntu 20.04, PHP konfiguracijske datoteke nalaze se u /etc/php// direktoriju i zadanom PHP-FPM bazen (www) konfiguracijska datoteka je /etc/php//fpm/pool.d/www.conf:

ls /etc/php/7.4/

Konfiguriranje PHP-FPM-a za slušanje na utičnici UNIX domene

Da konfigurirate PHP-FPM za slušanje na UNIX domenskom utičnici, otvorite svoju zadanu konfiguracijsku datoteku bazena PHP-FPM koristeći svoj omiljeni uređivač teksta.

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

Zatim potražite direktivu za slušanje i postavite je na ime staze datoteke UNIX domenske utičnice kako slijedi. Imajte na umu da većina instalacija prema zadanim postavkama koristi utičnicu UNIX domene.

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

Ako koristite utičnicu UNIX domene, također trebate postaviti odgovarajuće dozvole za čitanje/pisanje za datoteku, kako biste omogućili veze s NGINX web poslužitelja. Prema zadanim postavkama, NGINX radi kao korisnik i grupa nginx na CentOS/RHEL/Fedora i www-data na Ubuntu i Debian.

Dakle, pronađite parametre listen.owner i listen.group i postavite ih u skladu s tim. Također, postavite način na 0660 pomoću parametra 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

Imajte na umu da ako dozvole za datoteku utičnice UNIX domene nisu ispravno postavljene, NGINX može vratiti pogrešku lošeg pristupnika.

Konfiguriranje PHP-FPM-a za slušanje na TCP/IP utičnici

Iako je utičnica UNIX domene brža od TCP/IP utičnice, prva je manje skalabilna jer može podržati komunikaciju između procesa samo na istom OS-u. Ako NGINX i pozadinski aplikacijski poslužitelj (PHP-FPM) rade na različitim sustavima, morat ćete konfigurirati PHP-FPM za slušanje TCP/IP utičnica za veze.

U konfiguracijskoj datoteci bazena PHP-FPM postavite listen adresu kako slijedi. Provjerite da priključak koji ste odabrali ne koristi drugi proces ili usluga na istom sustavu.

listen = 127.0.0.1:3000

Konfiguriranje NGINX-a za rad s PHP-FPM poslužiteljem aplikacija

Nakon što ste konfigurirali adresu koju PHP-FPM sluša, trebate konfigurirati NGINX da mu šalje zahtjeve putem proxyja putem te adrese, koristeći fastcgi_pass konfiguracijski parametar, u konfiguracijskoj datoteci bloka virtualnog poslužitelja.

Na primjer, ako je konfiguracijska datoteka za vašu web stranicu /etc/nginx/conf.d/example.com.conf, otvorite je za uređivanje.

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

Potražite blok location za obradu .php datoteka i postavite parametar fastcgi_pass na sljedeći način, ako ste konfigurirali PHP-FPM za slušanje na UNIX-u utič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

Ili upotrijebite TCP/IP adresu ako ste konfigurirali PHP-FPM za slušanje na TCP/IP utičnici. Ako pozadinski aplikacijski poslužitelj (PHP-FPM) radi na zasebnom poslužitelju (zamijenite 10.42.0.10 IP adresom stroja na kojem je PHP-FPM FastCGI poslužitelj trči).

fastcgi_pass  10.42.0.10:3000;

Važno: Na CentOS 8, PHP-FPM je definiran kao uzvodni poslužitelj u / etc/nginx/conf.d/php-fpm.conf datoteku, unutar uzvodnog bloka, s nazivom php-fpm.

Ovdje možete izvršiti odgovarajuće promjene ovisno o adresi PHP-FPM konfiguriranoj za slušanje u konfiguracijskoj datoteci bazena. Zadana konfiguracija ukazuje na utičnicu UNIX domene.

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

i u datoteci bloka poslužitelja vaše stranice jednostavno postavite parametar fastcgi_pass kao što je prikazano.

fastcgi_pass php-fpm;

Nakon što izvršite promjene u konfiguracijama PHP-FPM i NGINX, provjerite njihovu konfiguracijsku sintaksu kako slijedi.

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

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

Dok izlaz naredbe prikazuje samo glavnu konfiguracijsku datoteku, sve ostale konfiguracijske datoteke također su uključene i provjerene.

Zatim trebate ponovno pokrenuti dvije usluge kako biste primijenili promjene, koristeći naredbu 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

Ako dobijete bilo kakvu pogrešku, možete provjeriti datoteke dnevnika NGINX i PHP-FPM pomoću naredbe 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

To je sve što smo imali za vas. Odjeljak za komentare ispod može se koristiti za postavljanje pitanja. Za više informacija pogledajte dokumentaciju NGINX i PHP-FPM dokumentaciju.