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