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/
:
$ 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.