Kako spojiti NGINX na PHP-FPM pomoću UNIX ili TCP/IP utičnice


NGINX web poslužitelj (kao obrnuti proxy) služi PHP aplikacijama putem FastCGI protokola (kao pozadinski poslužitelj aplikacija). NGINX koristi PHP-FPM (FastCGI Process Manager), alternativnu PHP FastCGI implementaciju koja se u pozadini izvodi kao demon, slušajući CGI zahtjeve. Dolazi s dodatnim značajkama dizajniranim za napajanje web lokacija ili web aplikacija s velikim opterećenjem, ali može se koristiti za web lokacije bilo koje veličine.

PHP-FPM ne samo da podržava konfiguraciju spremišta resursa FastCGI, već također poboljšava mnoge interne dijelove FastCGI i povećava izvještavanje o pogreškama, prekid skripte i još mnogo toga. Sadrži PHP demonizaciju, upravljanje procesima, dinamički broj procesa iz kojih mogu doći zahtjevi, zaglavlje pogreške, podršku za ubrzani prijenos i još mnogo toga.

Da bi prihvatio FastCGI zahtjeve od NGINX-a, PHP-FPM može slušati na TCP/IP utičnici ili UNIX domeni. Koju god adresu odaberete koristiti je ona koju NGINX koristi za povezivanje (proxy zahtjevi) s PHP-FPM, koristeći direktivu fastcgi_pass .

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

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

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

Utičnice UNIX domene (ili IPC) sredstvo su međuprocesne komunikacije (IPC) koje omogućuju učinkovitu razmjenu podataka između procesa koji se izvode na istom operativnom sustavu, dok TCP/IP (ili Internet domena) utičnice omogućuju procesima komunikaciju putem 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), poslužitelj možete povezati s utičnicom UNIX domene pomoću naziva puta datoteke (npr./Run/php-fpm/www. sock), što je vidljivo u datotečnom sustavu.

Utičnica UNIX domene posebna je vrsta datoteke - na nju se primjenjuju dozvole za datoteku i direktorij (kao što je slučaj s bilo kojom drugom vrstom UNIX datoteke) i može se koristiti za ograničavanje koji procesi na hostu mogu čitati i pisati u datoteku, (i na taj način komunicirati sa pozadinskim poslužiteljem).

Na ovaj je način UNIX utičnica domene sigurna jer je mogu koristiti samo procesi na lokalnom hostu. TCP/IP utičnica može biti izložena internetu koja predstavlja sigurnosni rizik osim ako se ne provode dodatne sigurnosne mjere poput vatrozida.

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

Možete konfigurirati adresu koja PHP-FPM preslušava u konfiguracijskoj datoteci spremišta resursa. Imajte na umu da s PHP-FPM možete pokretati nekoliko spremišta procesa s različitim postavkama. Zadani bazen naziva se www .

Mjesto konfiguracijske datoteke spremišta resursa ovisi o načinu na koji su PHP i PHP-FPM instalirani na Linux sustav (bilo da je to zadana/pojedinačna verzija ili više verzija istovremeno).

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

Da biste popisali sve PHP konfiguracijske datoteke, upotrijebite sljedeću naredbu ls.

# ls /etc/php*

Na Ubuntu 20.04, PHP datoteke za konfiguraciju nalaze se u direktoriju /etc/php// i zadanoj datoteci za konfiguraciju PHP-FPM (www) je /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

Konfiguriranje PHP-FPM-a za preslušavanje na UNIX podnožju domene

Da biste konfigurirali PHP-FPM za preslušavanje na utičnici domene UNIX, otvorite zadanu datoteku za konfiguraciju PHP-FPM spremišta pomoću omiljenog uređivača teksta.

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

Zatim potražite direktivu Listen i postavite je na naziv puta datoteke utičnice UNIX domene 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ća dopuštenja za čitanje/pisanje za datoteku kako biste omogućili veze s NGINX web poslužitelja. Prema zadanim postavkama, NGINX radi kao korisnički i grupni nginx na CentOS/RHEL/Fedora i www-data na Ubuntuu i Debianu.

Dakle, pronađite parametre listen.owner i listen.group i postavite ih u skladu s tim. Također, postavite način rada 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šnu pogrešku pristupnika.

Konfiguriranje PHP-FPM-a za preslušavanje 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žavati samo međusobnu komunikaciju na istom OS-u. Ako se NGINX i pozadinski poslužitelj aplikacija (PHP-FPM) izvode na različitim sustavima, morat ćete konfigurirati PHP-FPM za preslušavanje na TCP/IP utičnici za veze.

U konfiguracijskoj datoteci PHP-FPM spremišta postavite adresu listen kako slijedi. Uvjerite se da port koji ste odabrali ne koristi drugi postupak ili usluga na istom sustavu.

listen = 127.0.0.1:3000

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

Nakon što konfigurirate adresu koju PHP-FPM sluša, morate konfigurirati NGINX da joj proxy zahtijeva putem te adrese, koristeći konfiguracijski parametar fastcgi_pass , u datoteci za konfiguraciju bloka virtualnog poslužitelja.

Na primjer, ako je konfiguracijska datoteka vašeg web mjesta /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 datoteka .php i postavite parametar fastcgi_pass na sljedeći način, ako ste PHP-FPM konfigurirali za preslušavanje 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 preslušavanje na TCP/IP utičnici. Ako se pozadinski poslužitelj aplikacija (PHP-FPM) izvodi na zasebnom poslužitelju (zamijenite 10.42.0.10 IP adresom stroja na kojem je pokrenut PHP-FPM FastCGI poslužitelj).

fastcgi_pass  10.42.0.10:3000;

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

Ovdje možete unijeti izmjene, ovisno o tome je li adresa PHP-FPM konfigurirana za preslušavanje 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 web lokacije jednostavno postavite parametar fastcgi_pass kako je prikazano.

fastcgi_pass php-fpm;

Nakon što promijenite konfiguracije PHP-FPM i NGINX, provjerite ispravnost sintakse njihove konfiguracije kako slijedi.

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

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

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

Dalje, morate ponovo pokrenuti dvije usluge da 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 kakve pogreške, 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 u nastavku može se koristiti za postavljanje pitanja. Za više informacija pogledajte dokumentaciju PHP-FPM.