Kaip prijungti NGINX prie PHP-FPM naudojant UNIX arba TCP/IP lizdą


NGINX žiniatinklio serveris (kaip atvirkštinis tarpinis serveris) aptarnauja PHP programas per „FastCGI“ protokolą (kaip užpakalinių programų serveris). „NGINX“ naudoja PHP-FPM („FastCGI Process Manager“) - alternatyvų PHP FastCGI diegimą, kuris veikia fone kaip deimonas ir klauso CGI užklausų. Jame yra papildomų funkcijų, skirtų sunkiai įkrautoms svetainėms ar interneto programoms maitinti, tačiau ji gali būti naudojama bet kokio dydžio svetainėms.

PHP-FPM palaiko ne tik „FastCGI“ išteklių telkinių konfigūravimą, bet ir patobulina daugelį „FastCGI“ vidinių elementų bei padidina klaidų ataskaitų teikimą, scenarijų nutraukimą ir daug daugiau. Jame yra PHP demonizavimas, procesų valdymas, dinamiškas procesų, iš kurių gali atsirasti užklausos, skaičius, klaidos antraštė, pagreitintas įkėlimo palaikymas ir dar daugiau.

Norėdami priimti „FastCGI“ užklausas iš NGINX, PHP-FPM gali klausytis TCP/IP lizdo arba UNIX domeno lizdo. Kad ir kurį adresą pasirinktumėte, NGINX naudoja prisijungdamas (tarpinio serverio užklausas) prie PHP-FPM naudodamas fastcgi_pass direktyvą.

Šiame vadove paaiškinta, kaip sukonfigūruoti NGINX prie serverio PHP programų naudojant PHP-FPM. Jame aprašoma, kada naudoti TCP/IP ar UNIX domeno lizdą NGINX prijungti prie PHP-FPM ir kodėl.

Šiame vadove daroma prielaida, kad „Linux“ sistemoje turite įdiegę NGINX ir PHP-FPM, kitaip žiūrėkite:

  • Kaip įdiegti LEMP serverį „CentOS 8“
  • Kaip įdiegti LEMP kamino „PhpMyAdmin“ į „Ubuntu 20.04 Server“
  • Kaip įdiegti NGINX, MySQL/MariaDB ir PHP į RHEL 8
  • Kaip įdiegti LEMP „Debian 10 Server“

UNIX domeno (arba IPC) lizdai yra tarpprocesinio ryšio (IPC) priemonė, leidžianti efektyviai keistis duomenimis tarp procesų, vykstančių toje pačioje operacinėje sistemoje, o TCP/IP (arba interneto domeno) lizdai leidžia procesams bendrauti tinklu.

Skirtingai nuo TCP/IP lizdo, identifikuojančio serverį pagal IP adresą ir prievadą (pvz., 127.0.0.1:9000), galite susieti serverį su UNIX domeno lizdu naudodami failo kelio pavadinimą (pvz.,/Run/php-fpm/www. kojinė), kuris matomas failų sistemoje.

UNIX domeno lizdas yra specialus failo tipas - jam taikomi failų ir katalogų leidimai (kaip ir bet kokio kito tipo UNIX failo atveju) ir gali būti naudojami norint apriboti, kurie pagrindinio kompiuterio procesai gali skaityti ir rašyti į failą, (ir taip bendrauti su užpakaliniu serveriu).

Tokiu būdu UNIX domeno lizdas yra saugus, nes jį gali naudoti tik vietinio kompiuterio procesai. TCP/IP lizdas gali būti veikiamas interneto, keliančio pavojų saugumui, nebent bus įdiegtos papildomos saugos priemonės, tokios kaip užkarda.

Svarbu tai, kad UNIX domeno lizdo naudojimas nėra tas pats, kas naudoti TCP/IP lizdą, atsižvelgiant į našumą, keli bandymai ir etalonai įrodė, kad UNIX domeno lizdai yra greitesni. Pagrindinis UNIX domenų lizdų trūkumas yra tas, kad jie yra mažiau keičiamo dydžio, palaiko tik procesų komunikaciją toje pačioje operacinėje sistemoje (OS).

Galite sukonfigūruoti adresą, kurio klauso PHP-FPM, išteklių fondo konfigūracijos faile. Atkreipkite dėmesį, kad naudodami PHP-FPM galite paleisti keletą procesų grupių su skirtingais nustatymais. Numatytasis telkinys vadinamas www .

Išteklių telkinio konfigūracijos failo vieta priklauso nuo to, kaip PHP ir PHP-FPM įdiegiami „Linux“ sistemoje (nesvarbu, ar tai numatytoji/viena versija, ar kelios versijos vienu metu).

Pavyzdžiui, „CentOS 8“ su viena versija visi PHP konfigūracijos failai yra kataloge /etc ir numatytasis PHP-FPM baseino (www) konfigūracijos failas yra /etc/php-fpm.d/www.conf:

Norėdami išvardyti visus PHP konfigūracijos failus, naudokite šią komandą ls.

# ls /etc/php*

„Ubuntu 20.04“ PHP konfigūracijos failai yra kataloge /etc/php// ir numatytame PHP-FPM baseino (www) konfigūracijos faile. yra /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

Konfigūruoti PHP-FPM, kad būtų galima klausytis UNIX domeno lizde

Norėdami sukonfigūruoti PHP-FPM klausytis UNIX domeno lizde, atidarykite numatytąjį PHP-FPM telkinio konfigūracijos failą naudodami mėgstamą teksto rengyklę.

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

Tada ieškokite klausymo direktyvos ir nustatykite ją kaip UNIX domeno lizdo failo kelio pavadinimą taip. Atminkite, kad daugumoje diegimų pagal nutylėjimą naudojamas UNIX domeno lizdas.

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

Jei naudojate UNIX domeno lizdą, taip pat turite nustatyti atitinkamas failo skaitymo/rašymo teises, kad leistumėte prisijungti iš NGINX žiniatinklio serverio. Pagal numatytuosius nustatymus „NGINX“ veikia kaip vartotojo ir grupės „nginx“ sistemose „CentOS/RHEL/Fedora“, o „www-data“ - „Ubuntu“ ir „Debian“.

Taigi, suraskite parametrus listen.owner ir listen.group ir atitinkamai nustatykite juos. Taip pat nustatykite režimą į 0660 naudodami parametrą 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

Atkreipkite dėmesį, kad jei UNIX domeno lizdo failo teisės nėra tinkamai nustatytos, NGINX gali pateikti klaidingą šliuzo klaidą.

Konfigūruoti PHP-FPM, kad būtų galima klausytis TCP/IP lizde

Nors UNIX domeno lizdas yra greitesnis už TCP/IP lizdą, pirmasis yra mažiau keičiamo dydžio, nes jis gali palaikyti tik procesų bendravimą toje pačioje OS. Jei „NGINX“ ir užpakalinės programos serveris (PHP-FPM) veikia skirtingose sistemose, turėsite sukonfigūruoti PHP-FPM, kad klausytumėtės TCP/IP lizde.

PHP-FPM telkinio konfigūracijos faile nustatykite adresą listen taip. Įsitikinkite, kad pasirinkto prievado nenaudoja kitas procesas ar tarnyba toje pačioje sistemoje.

listen = 127.0.0.1:3000

„NGINX“ konfigūravimas darbui su PHP-FPM programų serveriu

Sukonfigūravę adresą, kurio klausosi PHP-FPM, turite sukonfigūruoti „NGINX“, kad ji pateiktų tarpinio serverio užklausą per tą adresą, naudodama konfigūravimo parametrą fastcgi_pass virtualaus serverio bloko konfigūracijos faile.

Pvz., Jei jūsų svetainės konfigūracijos failas yra /etc/nginx/conf.d/example.com.conf, atidarykite jį redaguoti.

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

Ieškokite bloko vieta , jei norite apdoroti .php failus ir nustatykite parametrą fastcgi_pass taip, jei sukonfigūravote PHP-FPM klausytis UNIX domeno lizdas.

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

Arba naudokite TCP/IP adresą, jei sukonfigūravote PHP-FPM klausytis TCP/IP lizdo. Jei užpakalinės programos serveris (PHP-FPM) veikia atskirame serveryje (10.42.0.10 pakeiskite mašinos, kurioje veikia PHP-FPM FastCGI serveris, IP adresu).

fastcgi_pass  10.42.0.10:3000;

Svarbu: „CentOS 8“ programoje PHP-FPM yra apibrėžtas kaip aukštesnio lygio serveris faile /etc/nginx/conf.d/php-fpm.conf, aukštesnio lygio bloke, pavadinimu php-fpm.

Čia galite atitinkamai atlikti pakeitimus, priklausomai nuo adreso, kurį PHP-FPM sukonfigūruotas klausytis, baseino konfigūracijos faile. Numatytoji konfigūracija nurodo UNIX domeno lizdą.

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

ir savo svetainės serverio blokavimo faile tiesiog nustatykite parametrą fastcgi_pass , kaip parodyta.

fastcgi_pass php-fpm;

Pakeitę PHP-FPM ir NGINX konfigūracijas, patikrinkite jų konfigūracijos sintaksės teisingumą taip.

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

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

Nors komandos išvestis rodo tik pagrindinį konfigūracijos failą, visi kiti konfigūracijos failai taip pat yra įtraukti ir tikrinami.

Tada, norėdami pritaikyti pakeitimus, turite iš naujo paleisti dvi tarnybas naudodami komandą 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

Jei pastebite klaidų, galite patikrinti NGINX ir PHP-FPM žurnalo failus naudodami „cat“ komandą.

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

Tai viskas, ką mes turėjome jums. Žemiau pateiktoje komentarų skiltyje galima užduoti klausimus. Norėdami gauti daugiau informacijos, žr. PHP-FPM dokumentaciją.