Kuidas ühendada NGINX PHP-FPM-iga UNIX- või TCP/IP-sokli abil


NGINX veebiserver (vastupidise puhverserverina) teenindab PHP-rakendusi FastCGI-protokolli kaudu (taustaprogrammide serverina). NGINX kasutab PHP-FPM-i (FastCGI protsessihaldurit), alternatiivset PHP FastCGI-juurutust, mis töötab taustal deemonina ja kuulab CGI-päringuid. Sellel on lisafunktsioonid, mis on mõeldud suure koormusega veebisaitide või veebirakenduste toitmiseks, kuid seda saab kasutada igas suuruses saitide jaoks.

PHP-FPM mitte ainult ei toeta FastCGI ressursikogumite konfigureerimist, vaid parandab ka paljusid FastCGI sisemisi osi ja suurendab tõrketeavet, skripti lõpetamist ja palju muud. See sisaldab PHP demoniseerimist, protsesside haldamist, dünaamilist arvu protsesse, millest päringud pärinevad, vea päist, kiirendatud üleslaadimise tuge ja palju muud.

NGCX-i FastCGI-päringute vastuvõtmiseks saab PHP-FPM kuulata kas TCP/IP- või UNIX-domeenipesas. Ükskõik, millist aadressi soovite kasutada, kasutab NGINX ühenduse saamiseks (puhverserveri taotlused) PHP-FPM-iga, kasutades fastcgi_pass -direktiivi.

Selles juhendis selgitatakse, kuidas seadistada NGINX PHP-FPM-i abil serveri PHP-rakendustesse. Selles kirjeldatakse, millal kasutada NGPX-i ja PHP-FPM-i ühendamiseks TCP/IP-i või UNIX-i domeenipesa.

Selles juhendis eeldatakse, et teie Linuxi süsteemi on installitud NGINX ja PHP-FPM, vastasel juhul vaadake:

  • Kuidas LEMP-serverit CentOS 8-le installida
  • Kuidas installida LEMP-i virna PhpMyAdmin Ubuntu 20.04 serverisse
  • Kuidas installida NGINX, MySQL/MariaDB ja PHP RHEL 8-le
  • Kuidas installida LEMP Debian 10 serverisse

UNIX-i domeeni (või IPC) pistikupesad on protsessidevaheline suhtlus (IPC), mis võimaldab tõhusat andmevahetust samas opsüsteemis töötavate protsesside vahel, samas kui TCP/IP (või Interneti-domeeni) pistikupesad võimaldavad protsessidel võrgu kaudu suhelda.

Erinevalt TCP/IP-pistikupesast, mis identifitseerib serveri IP-aadressi ja pordi järgi (nt 127.0.0.1:9000), saate serveri siduda UNIX-i domeenipesaga faili teenime abil (nt/run/php-fpm/www. sokk), mis on failisüsteemis nähtav.

UNIX-i domeenipesa on teatud tüüpi fail - selle suhtes kehtivad faili- ja kataloogiõigused (nagu mis tahes muu tüüpi UNIX-failide puhul) ja seda saab kasutada selleks, et piirata seda, millised hostis olevad protsessid saavad faili lugeda ja kirjutada, (ja seega taustserveriga suhelda).

Nii on UNIX-i domeenipesa turvaline, kuna seda saavad kasutada ainult kohaliku hosti protsessid. TCP/IP-pesa võib olla turvariski ohustava Interneti-ühenduse käes, kui pole rakendatud täiendavaid turvameetmeid, näiteks tulemüüri.

Oluline on see, et UNIX-i domeenipesa kasutamine ei ole sama mis TCP/IP-pesa kasutamine jõudluse osas. Mitmed testid ja võrdlusalused on osutunud UNIX-i domeenipesade kiiremaks. UNIX-i domeenipesade peamine puudus on see, et need on vähem skaleeritavad, nad toetavad ainult protsessidevahelist suhtlemist samas opsüsteemis (OS).

Saate konfigureerida aadressi, mida PHP-FPM kuulab, ressursikogumi konfiguratsioonifailis. Pange tähele, et PHP-FPM-iga saate käivitada mitu erinevate seadistustega protsesside kogumit. Vaikimisi kogumit nimetatakse www .

Ressursivarude konfiguratsioonifaili asukoht sõltub sellest, kuidas PHP ja PHP-FPM Linuxi süsteemi installitakse (olgu see siis vaikimisi/üks versioon või mitu versiooni üheaegselt).

Näiteks CentOS 8-s koos ühe versiooniga asuvad kõik PHP-i konfiguratsioonifailid kataloogis /etc ja vaikimisi konfiguratsioonifail PHP-FPM pool (www) on /etc/php-fpm.d/www.conf:

Kõigi PHP konfiguratsioonifailide loetlemiseks kasutage järgmist käsku ls.

# ls /etc/php*

Ubuntu 20.04-s asuvad PHP konfiguratsioonifailid kataloogis /etc/php// ja PHP-FPM vaikekomplekti (www) konfiguratsioonifailis on /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

PHP-FPM-i konfigureerimine kuulamiseks UNIX-i domeenipesas

PHP-FPM-i konfigureerimiseks UNIX-i domeenipesas kuulamiseks avage oma vaiketekstiredaktori abil oma PHP-FPM-i vaikefailide konfiguratsioonifail.

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

Seejärel otsige kuulamisdirektiivi ja määrake see UNIX-i domeenipesa failinimeks järgmiselt. Pange tähele, et enamik installe kasutab vaikimisi UNIX-i domeenipesa.

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

Kui kasutate UNIX-i domeenipesa, peate ka failile looma/kirjutama õigused, et võimaldada ühendusi NGINX-veebiserverist. Vaikimisi töötab NGINX kasutaja ja rühma nginx-iga CentOS/RHEL/Fedora ning www-andmetena Ubuntu ja Debian.

Niisiis leidke parameetrid listen.owner ja listen.group ja määrake need vastavalt. Samuti määrake parameetri listen.mode režiimiks 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

Pange tähele, et kui UNIX-i domeenipesa faili õigused pole õigesti määratud, võib NGINX tagastada vale lüüsivea.

PHP-FPM-i konfigureerimine kuulamiseks TCP/IP-pesas

Kuigi UNIX-i domeenipesa on kiirem kui TCP/IP-pistikupesa, on esimene vähem skaleeritav, kuna see saab protsesside vahelist suhtlust toetada ainult samas OS-is. Kui NGINX ja taustarakendusserver (PHP-FPM) töötavad erinevates süsteemides, peate seadistama PHP-FPM-i, et TCP/IP-pistikupesast ühendusi kuulata.

PHP-FPM-i basseini konfiguratsioonifailis määrake aadress listen järgmiselt. Veenduge, et teie valitud porti ei kasutaks mõni teine sama süsteemi protsess või teenus.

listen = 127.0.0.1:3000

NGINXi seadistamine töötama PHP-FPM-i rakendusserveriga

Kui olete konfigureerinud aadressi, mida PHP-FPM kuulab, peate NGINX-i konfigureerima sellele aadressile selle kaudu puhverserveri taotlemiseks, kasutades konfiguratsiooniparameetrit fastcgi_pass virtuaalse serveri blokeerimisfailis.

Näiteks kui teie veebisaidi konfiguratsioonifail on /etc/nginx/conf.d/example.com.conf, avage see redigeerimiseks.

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

Otsige asukoht plokk .php -failide töötlemiseks ja määrake parameeter fastcgi_pass järgmiselt, kui olete PHP-FPM-i seadistanud kuulama UNIX-is domeenipesa.

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

Või kasutage TCP/IP-aadressi, kui olete seadistanud PHP-FPM-i kuulama TCP/IP-pistikupesast. Kui taustaprogrammi server (PHP-FPM) töötab eraldi serveris (asendage 10.42.0.10 selle masina IP-aadressiga, kus töötab PHP-FPM FastCGI server).

fastcgi_pass  10.42.0.10:3000;

Tähtis: CentOS 8-s on PHP-FPM määratletud failis /etc/nginx/conf.d/php-fpm.conf ülesvoolu serverina ülesvoolu plokis, nimega php-fpm.

Siin saate muudatusi vastavalt teha, olenevalt sellest, kas PHP-FPM on konfigureeritud kuulamiseks, basseini konfiguratsioonifailis. Vaikekonfiguratsioon osutab UNIX-i domeenipesale.

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

ja määrake oma saidi serveri blokeerimisfailis lihtsalt parameeter fastcgi_pass , nagu näidatud.

fastcgi_pass php-fpm;

Pärast muudatuste tegemist PHP-FPM ja NGINX konfiguratsioonides kontrollige nende konfiguratsioonisüntaksite õigsust järgmiselt.

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

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

Kuigi käsu väljund näitab ainult peamist konfiguratsioonifaili, on kaasatud ja kontrollitud ka kõik muud konfiguratsioonifailid.

Järgmisena peate muudatuste rakendamiseks kaks teenust taaskäivitama, kasutades käsku 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

Vigade ilmnemisel saate kassi käsu abil kontrollida logifaile NGINX ja 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

See on kõik, mis meil teie jaoks oli. Allolevat kommentaaride jaotist saab kasutada küsimuste esitamiseks. Lisateavet leiate PHP-FPM dokumentatsioonist.