Kuinka yhdistää NGINX PHP-FPM: ään UNIX- tai TCP/IP-liitännällä


NGINX-verkkopalvelin (käänteisenä välityspalvelimena) palvelee PHP-sovelluksia FastCGI-protokollan kautta (taustapalvelinsovelluksena). NGINX käyttää PHP-FPM: ää (FastCGI Process Manager), vaihtoehtoista PHP FastCGI -toteutusta, joka toimii taustalla daemonina kuunnellen CGI-pyyntöjä. Siinä on lisäominaisuuksia, jotka on suunniteltu raskaasti ladattujen verkkosivustojen tai verkkosovellusten virtalähteeksi, mutta sitä voidaan käyttää kaiken kokoisille sivustoille.

PHP-FPM ei vain tue FastCGI-resurssivarastojen kokoonpanoa, vaan se parantaa myös monia FastCGI-sisäisiä osia ja lisää virheraportointia, komentosarjojen lopettamista ja paljon muuta. Siinä on PHP-demonisointi, prosessinhallinta, dynaaminen määrä prosesseja, joista pyynnöt voivat tulla, virheen otsikko, nopeutettu lataustuki ja paljon muuta.

Hyväksyäksesi FastCGI-pyyntöjä NGINX: ltä, PHP-FPM voi kuunnella joko TCP/IP- tai UNIX-toimialueella. Minkä osoitteen valitsetkin, NGINX käyttää yhteyden muodostamiseen (välityspalvelupyynnöt) PHP-FPM: ään käyttämällä fastcgi_pass -direktiiviä.

Tässä oppaassa kerrotaan, kuinka NGINX määritetään palvelimen PHP-sovelluksiin käyttämällä PHP-FPM: ää. Siinä kuvataan, milloin TCP/IP- tai UNIX-toimialueella NGINX yhdistetään PHP-FPM: ään ja miksi.

Tässä oppaassa oletetaan, että sinulla on NGINX ja PHP-FPM asennettuna Linux-järjestelmääsi, muuten katso:

  • LEMP-palvelimen asentaminen CentOS 8: een
  • LEMP-pinon PhpMyAdmin asentaminen Ubuntu 20.04 -palvelimeen
  • NGINX: n, MySQL/MariaDB: n ja PHP: n asentaminen RHEL 8: een
  • LEMP: n asentaminen Debian 10 Server -palvelimeen

UNIX-toimialueet (tai IPC) ovat prosessien välisen viestinnän (IPC) keinoja, jotka mahdollistavat tehokkaan tiedonvaihdon samalla käyttöjärjestelmällä toimivien prosessien välillä, kun taas TCP/IP (tai Internet-toimialue) -liitännät mahdollistavat prosessien kommunikoinnin verkon kautta.

Toisin kuin TCP/IP-liitäntä, joka tunnistaa palvelimen IP-osoitteen ja portin (esim. 127.0.0.1:9000) perusteella, voit sitoa palvelimen UNIX-toimialueeseen tiedostopolun avulla (esim./Run/php-fpm/www. sock), joka näkyy tiedostojärjestelmässä.

UNIX-toimialue on erityinen tiedostotyyppi - siihen sovelletaan tiedosto- ja hakemistolupia (kuten minkä tahansa muun tyyppisen UNIX-tiedoston tapauksessa), ja sitä voidaan käyttää rajoittamaan sitä, mitkä isännän prosessit voivat lukea ja kirjoittaa tiedostoon, (ja siten kommunikoida taustapalvelimen kanssa).

Tällä tavalla UNIX-toimialue on suojattu, koska vain paikallisen isännän prosessit voivat käyttää sitä. TCP/IP-liitäntä voi olla alttiina Internetille, mikä aiheuttaa tietoturvariskin, ellei ylimääräisiä turvatoimia, kuten palomuuria, oteta käyttöön.

Tärkeää on, että UNIX-toimialueen käyttö ei ole sama kuin TCP/IP-liitännän käyttö suorituskyvyn suhteen, useat testit ja vertailuarvot ovat osoittaneet, että UNIX-toimialue on nopeampi. UNIX-toimialueiden tärkein haittapuoli on, että ne ovat vähemmän skaalautuvia, ne tukevat vain prosessien välistä viestintää samassa käyttöjärjestelmässä.

Voit määrittää osoitteen, jonka PHP-FPM kuuntelee, resurssivaraston määritystiedostossa. Huomaa, että PHP-FPM: n avulla voit suorittaa useita prosesseja eri asetuksilla. Oletusvarastoa kutsutaan nimellä www .

Resurssivaraston määritystiedoston sijainti riippuu tavasta, jolla PHP ja PHP-FPM asennetaan Linux-järjestelmään (olipa kyseessä oletus/yksi versio vai useita versioita samanaikaisesti).

Esimerkiksi CentOS 8: lla, yhdellä versiolla, kaikki PHP-määritystiedostot sijaitsevat /etc -hakemistossa ja oletusarvoinen PHP-FPM pool (www) -määritystiedosto on /etc/php-fpm.d/www.conf:

Voit luetella kaikki PHP-määritystiedostot seuraavalla ls-komennolla.

# ls /etc/php*

Ubuntu 20.04: ssä PHP-määritystiedostot sijaitsevat hakemistossa /etc/php// ja PHP-FPM-oletusarvojen (www) -määritystiedostossa. on /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

PHP-FPM: n määrittäminen kuuntelemaan UNIX-toimialueella

Määritä PHP-FPM kuuntelemaan UNIX-toimialueelta avaamalla oletusarvoinen PHP-FPM-poolin kokoonpanotiedosto suosikkitekstieditorilla.

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

Etsi sitten kuunteludirektiivi ja aseta se UNIX-toimialueen tiedostopolkuun seuraavasti. Huomaa, että useimmat asennukset käyttävät oletusarvoisesti UNIX-toimialueita.

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

Jos käytät UNIX-toimialueen liitäntää, sinun on myös asetettava tiedostolle asianmukaiset luku- ja kirjoitusoikeudet, jotta yhteydet sallitaan NGINX-verkkopalvelimelta. Oletusarvon mukaan NGINX toimii käyttäjän ja ryhmän nginx-ohjelmana CentOS/RHEL/Fedoralla ja www-datana Ubuntussa ja Debianissa.

Joten etsi parametrit listen.owner ja listen.group ja aseta ne vastaavasti. Aseta myös tilaksi 0660 parametrilla 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

Huomaa, että jos UNIX-toimialueen socket-tiedoston oikeuksia ei ole asetettu oikein, NGINX saattaa palauttaa virheellisen yhdyskäytävävirheen.

PHP-FPM: n määrittäminen kuuntelemaan TCP/IP-liitännässä

Vaikka UNIX-toimialue on nopeampi kuin TCP/IP-liitäntä, edellinen on vähemmän skaalautuva, koska se voi tukea vain prosessien välistä viestintää samalla käyttöjärjestelmällä. Jos NGINX ja taustajärjestelmäsovelluspalvelin (PHP-FPM) ovat käynnissä eri järjestelmissä, sinun on määritettävä PHP-FPM kuuntelemaan TCP/IP-liitännässä yhteyksiä.

Aseta PHP-FPM-poolin määritystiedostossa listen -osoite seuraavasti. Varmista, että toista prosessia tai palvelua ei käytetä valitsemaasi porttia samassa järjestelmässä.

listen = 127.0.0.1:3000

NGINX: n määrittäminen toimimaan PHP-FPM-sovelluspalvelimen kanssa

Kun olet määrittänyt osoitteen, jonka PHP-FPM kuuntelee, sinun on määritettävä NGINX pyytämään sitä välityspalvelimelta kyseisen osoitteen kautta käyttämällä määritysparametriä fastcgi_pass virtuaalipalvelinlohkon määritystiedostossa.

Jos verkkosivustosi määritystiedosto on esimerkiksi /etc/nginx/conf.d/example.com.conf, avaa se muokkausta varten.

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

Etsi sijainti -lohko .php -tiedostojen käsittelemiseksi ja aseta parametri fastcgi_pass seuraavasti, jos olet määrittänyt PHP-FPM: n kuuntelemaan UNIX-järjestelmässä toimialue.

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

Tai käytä TCP/IP-osoitetta, jos olet määrittänyt PHP-FPM: n kuuntelemaan TCP/IP-liitännästä. Jos taustasovelluspalvelin (PHP-FPM) on käynnissä erillisellä palvelimella (korvaa 10.42.0.10 sen laitteen IP-osoitteella, jolla PHP-FPM FastCGI -palvelin on käynnissä).

fastcgi_pass  10.42.0.10:3000;

Tärkeää: CentOS 8: ssa PHP-FPM määritetään ylävirran palvelimeksi /etc/nginx/conf.d/php-fpm.conf -tiedostossa ylävirran lohkossa nimellä php-fpm.

Voit tehdä muutoksia tässä mukaisesti sen mukaan, mistä osoitteesta PHP-FPM on määritetty kuuntelemaan, poolin määritystiedostossa. Oletuskokoonpano viittaa UNIX-toimialueeseen.

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

ja aseta sivustosi palvelimen estotiedostossa vain fastcgi_pass -parametri kuvan osoittamalla tavalla.

fastcgi_pass php-fpm;

Kun olet tehnyt muutoksia PHP-FPM- ja NGINX-kokoonpanoihin, tarkista niiden kokoonpanosyntaksin oikeellisuus seuraavasti.

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

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

Vaikka komentolähdössä näkyy vain pääasetustiedosto, kaikki muut määritystiedostot sisältyvät ja tarkistetaan myös.

Seuraavaksi sinun on käynnistettävä nämä kaksi palvelua uudelleen muutosten toteuttamiseksi systemctl-komennolla.

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

Jos saat virheitä, voit tarkistaa NGINX- ja PHP-FPM-lokitiedostot kissa-komennolla.

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

Se on kaikki mitä meillä oli sinulle. Alla olevaa kommenttiosaa voidaan käyttää kysymysten esittämiseen. Lisätietoja on PHP-FPM-ohjeissa.