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


NGINX-verkkopalvelin (käänteisenä välityspalvelimena) palvelee PHP-sovelluksia FastCGI-protokollan kautta (taustasovelluspalvelimena). NGINX käyttää PHP-FPM:tä (FastCGI Process Manager), vaihtoehtoista PHP FastCGI -toteutusta, joka toimii taustalla demonina ja kuuntelee >CGI-pyynnöt. Siinä on lisäominaisuuksia, jotka on suunniteltu raskaasti kuormitettujen verkkosivustojen tai verkkosovellusten tehostamiseen, mutta sitä voidaan käyttää kaikenkokoisille sivustoille.

PHP-FPM ei ainoastaan tue FastCGI-resurssiryhmien määritystä, vaan se myös parantaa monia FastCGI -sisäosia ja lisää virheraportointia ja komentosarjaa. lopettaminen ja paljon muuta. Siinä on PHP-demonisointi, prosessien hallinta, dynaaminen määrä prosesseja, joista voi tulla pyyntöjä, virheotsikko, nopeutettu lataustuki ja paljon muuta.

Hyväksyäkseen FastCGI-pyynnöt NGINX:ltä PHP-FPM voi joko kuunnella TCP/IP-pistorasiaa tai UNIX-verkkotunnusta. pistorasia. Mitä tahansa osoitetta valitsetkin, NGINX käyttää yhteyden muodostamiseen (välityspalvelinpyynnöt) PHP-FPM:ään fastcgi_pass-direktiivin avulla.

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

Tässä oppaassa oletetaan, että Linux-järjestelmääsi on asennettu NGINX ja PHP-FPM. Muussa tapauksessa katso:

  • Kuinka asentaa LEMP-palvelin CentOS 8:aan
  • Kuinka asentaa LEMP-pino PhpMyAdmin Ubuntu 20.04 -palvelimeen
  • Kuinka asentaa NGINX, MySQL/MariaDB ja PHP RHEL 8:aan
  • Kuinka asentaa LEMP Debian 10 -palvelimelle

Mitä minun pitäisi käyttää: UNIX Domain Socket tai TCP/IP Socket?

UNIX-verkkotunnuksen (tai IPC) pistokkeet ovat prosessien välisen viestinnän (IPC) väline, joka mahdollistaa tehokkaan tiedonvaihdon samassa käyttöjärjestelmässä toimivien prosessien välillä, kun TCP /IP (tai Internet Domain) -vastakkeet sallivat prosessien viestiä verkon kautta.

Toisin kuin TCP/IP-vastake, joka tunnistaa palvelimen IP-osoitteen ja portin perusteella (esim. 127.0.0.1:9000), voit sitoa palvelimen UNIX-verkkotunnuksen vastakkeeseen käyttämällä tiedostopolkunimi (esim. /run/php-fpm/www.sock), joka näkyy tiedostojärjestelmässä.

UNIX-verkkoalueen socket on erityinen tiedostotyyppi – sitä koskevat tiedosto- ja hakemistooikeudet (kuten minkä tahansa muun tyyppisten UNIX-tiedostojen tapauksessa), ja sitä voidaan käyttää rajoittamaan isäntäkoneen prosessit, jotka voivat lukea tiedostoa ja kirjoittaa siihen, (ja siten kommunikoi taustapalvelimen kanssa).

Tällä tavalla UNIX-toimialueen vastake on suojattu, koska vain paikallisen isännän prosessit voivat käyttää sitä. TCP/IP-vastake voi olla alttiina Internetille ja aiheuttaa turvallisuusriskin, ellei ylimääräisiä suojaustoimenpiteitä, kuten palomuuria, oteta käyttöön.

Tärkeää on, että UNIX-verkkotunnuksen vastakkeen käyttäminen ei ole sama asia kuin TCP/IP-vastakkeen käyttö suorituskyvyn suhteen. Useat testit ja vertailut ovat osoittaneet UNIX-verkkotunnuksen vastakkeiden olevan nopeampia. UNIX-verkkoaluepistokkeiden suurin haittapuoli on, että ne ovat vähemmän skaalautuvia, ne tukevat vain prosessien välistä viestintää samassa käyttöjärjestelmässä (OS).

Missä voin määrittää PHP-FPM-kuunteluosoitteen?

Voit määrittää osoitteen, jota PHP-FPM kuuntelee resurssivarannon määritystiedostossa. Huomaa, että PHP-FPM-sovelluksella voit suorittaa useita prosesseja eri asetuksilla. Oletuspooli on nimeltään www.

Resurssivarannon määritystiedoston sijainti riippuu tavasta, jolla PHP ja PHP-FPM on asennettu Linux-järjestelmään (onko se oletus-/yksiversio tai useita versioita samanaikaisesti) .

Esimerkiksi CentOS 8:ssa, jossa on yksi versio, kaikki PHP-määritystiedostot sijaitsevat /etc-hakemistossa ja oletusarvoisessa PHP-FPM:ssä. poolin (www) määritystiedosto on /etc/php-fpm.d/www.conf:

Listaa kaikki PHP-määritystiedostot käyttämällä seuraavaa ls-komentoa.

ls /etc/php*

Ubuntu 20.04:n PHP-määritystiedostot sijaitsevat hakemistossa /etc/php// ja oletusarvoisessa PHP-FPM > poolin (www) määritystiedosto on /etc/php//fpm/pool.d/www.conf:

ls /etc/php/7.4/

PHP-FPM:n määrittäminen kuuntelemaan UNIX Domain Socketissa

Määritä PHP-FPM kuuntelemaan UNIX-verkkotunnuksen socketissa avaamalla oletusarvoinen PHP-FPM -poolimääritystiedosto suosikkitekstieditorillasi.

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 kuunteluohje ja aseta se UNIX-toimialueen socketin tiedostopolkuun seuraavasti. Huomaa, että useimmat asennukset käyttävät oletusarvoisesti UNIX-toimialueen vastaketta.

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

Jos käytät UNIX-verkkoalueen vastaketta, sinun on myös asetettava tiedostolle asianmukaiset luku-/kirjoitusoikeudet, jotta yhteydet NGINX-verkkopalvelimelta voidaan sallia. Oletuksena NGINX toimii käyttäjänä ja ryhmänä nginx CentOS/RHEL/Fedorassa ja www-data Ubuntussa. ja Debian.

Joten etsi parametrit listen.owner ja listen.group ja aseta ne vastaavasti. Aseta tilaksi myös 0660 käyttämällä listen.mode-parametria.

------------- 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 huonon yhdyskäytävän virheen.

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

Vaikka UNIX-toimialueen vastake on nopeampi kuin TCP/IP-vastake, entinen on vähemmän skaalautuva, koska se tukee vain prosessien välistä viestintää samassa käyttöjärjestelmässä. Jos NGINX ja taustasovelluspalvelin (PHP-FPM) toimivat eri järjestelmissä, sinun on määritettävä PHP-FPM, jotta voit kuunnella TCP/IP-liitäntä yhteyksiä varten.

Aseta PHP-FPM -poolimääritystiedostossa kuuntelu-osoite seuraavasti. Varmista, että valitsemaasi porttia ei käytä toinen prosessi tai palvelu 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, jota PHP-FPM kuuntelee, sinun on määritettävä NGINX lähettämään välityspalvelinpyyntö kyseisen osoitteen kautta käyttämällä fastcgi_pass-komentoa. konfigurointiparametri 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 location-lohko .php-tiedostojen käsittelyä varten ja aseta parametri fastcgi_pass seuraavasti, jos määritit PHP-FPM:n kuuntelemaan UNIX-tietokonetta verkkotunnuksen pistorasia.

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 määritit PHP-FPM kuuntelemaan TCP/IP-vastaketta. Jos taustasovelluspalvelin (PHP-FPM) on käynnissä erillisellä palvelimella (korvaa 10.42.0.10 sen koneen IP-osoitteella, jossa PHP-FPM FastCGI-palvelin juoksee).

fastcgi_pass  10.42.0.10:3000;

Tärkeää: CentOS 8:ssa PHP-FPM määritellään ylävirran palvelimeksi / etc/nginx/conf.d/php-fpm.conf-tiedosto ylävirran lohkossa, jonka nimi on php-fpm.

Voit tehdä muutoksia tähän riippuen osoitteesta, jota PHP-FPM on määritetty kuuntelemaan poolin määritystiedostossa. Oletuskokoonpano osoittaa UNIX-toimialueen vastakkeeseen.

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

ja aseta sivustosi palvelimen estotiedostoon fastcgi_pass-parametri kuvan mukaisesti.

fastcgi_pass php-fpm;

Kun olet tehnyt muutoksia PHP-FPM- ja NGINX-määrityksiin, tarkista niiden määrityssyntaksi seuraavasti.

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

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

Vaikka komennon tulos näyttää vain pääasetustiedoston, myös kaikki muut määritystiedostot ovat mukana ja tarkistettu.

Seuraavaksi sinun on käynnistettävä kaksi palvelua uudelleen, jotta muutokset otetaan käyttöön käyttämällä systemctl-komentoa.

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

Siinä kaikki, mitä meillä oli sinulle. Alla olevaa kommenttiosiota voidaan käyttää kysymysten esittämiseen. Lisätietoja on NGINX-dokumentaatiossa ja PHP-FPM-dokumentaatiossa.