Erillisten PHP-FPM-poolien määrittäminen NGINX:ssä
Julkaistu: 15. helmikuuta 2025 klo 11.49.36 UTC
Viimeksi päivitetty: 12. tammikuuta 2026 klo 8.29.56 UTC
Tässä artikkelissa käyn läpi konfigurointivaiheet, joita tarvitaan useiden PHP-FPM-poolien suorittamiseen ja NGINX:n yhdistämiseen niihin FastCGI:n kautta, mikä mahdollistaa prosessien erottelun ja eristämisen virtuaalisten isäntien välillä.
How to Set Up Separate PHP-FPM Pools in NGINX
Tämän viestin tiedot perustuvat NGINX 1.4.6:een ja PHP-FPM 5.5.9:ään, jotka toimivat Ubuntu Server 14.04 x64 -käyttöjärjestelmässä. Tiedot eivät välttämättä päde muihin versioihin. (Päivitys: Voin vahvistaa, että Ubuntu Server 24.04:stä, PHP-FPM 8.3:sta ja NGINX 1.24.0:sta lähtien kaikki tämän viestin ohjeet toimivat edelleen.)
Useiden PHP-FPM-aliprosessipoolien perustamisessa on useita etuja sen sijaan, että kaikki suoritettaisiin samassa poolissa. Tärkeimpinä niistä mieleen tulevat tietoturva, erottelu/eristys ja resurssienhallinta.
Motivaationne olipa mikä tahansa, tämä postaus auttaa teitä siinä :-)
Osa 1 – Uuden PHP-FPM-poolin määrittäminen
Ensin sinun on löydettävä hakemisto, johon PHP-FPM tallentaa pool-määritykset. Ubuntu 14.04:ssä tämä on oletusarvoisesti /etc/php5/fpm/pool.d. Siellä on luultavasti jo tiedosto nimeltä www.conf, joka sisältää oletuspoolin määritykset. Jos et ole aiemmin katsonut kyseistä tiedostoa, kannattaa ehkä käydä se läpi ja muokata siinä olevia asetuksia omaan kokoonpanoosi sopiviksi, koska oletusasetukset on tarkoitettu melko alitehoiselle palvelimelle. Toistaiseksi kannattaa kuitenkin tehdä kopio tiedostosta, jotta meidän ei tarvitse aloittaa alusta:
Korvaa tietenkin ”mypool” millä tahansa haluamallasi nimellä altaallesi.
Avaa nyt uusi tiedosto käyttämällä nanoa tai mitä tahansa muuta tekstieditoria ja säädä sitä tarkoitukseesi sopivaksi. Haluat luultavasti muokata aliprosessien numeroita ja mahdollisesti sitä, minkä käyttäjän ja ryhmän alaisuudessa pool toimii, mutta kaksi asetusta, jotka sinun on ehdottomasti muutettava, ovat poolin nimi ja soketti, jota se kuuntelee, muuten se on ristiriidassa olemassa olevan poolin kanssa ja asiat lakkaavat toimimasta.
Poolin nimi on tiedoston yläosassa hakasulkeissa. Oletusarvoisesti se on [www]. Muuta tämä haluamaksesi; ehdotan samaa nimeä kuin asetustiedostolle, joten tässä esimerkissä vaihda se muotoon [mypool]. Jos et muuta sitä, näyttää siltä, että PHP-FPM lataa vain ensimmäisen kyseisen nimen mukaisen asetustiedoston, mikä todennäköisesti rikkoo järjestelmän.
Sinun on sitten muutettava kuuntelemaasi sokettia tai osoitetta, joka määritellään listen-direktiivissä. Oletusarvoisesti PHP-FPM käyttää Unix-socketteja, joten listen-direktiivisi näyttää todennäköisesti tältä:
Voit muuttaa sen haluamaasi kelvolliseen nimeen, mutta jälleen kerran suosittelen pysymään jossain samankaltaisessa kuin määritystiedoston nimi, joten voit esimerkiksi asettaa sen muotoon:
Okei, tallenna tiedosto ja poistu tekstieditorista.
Osa 2 – Päivitä NGINX-virtuaalipalvelimen kokoonpano
Nyt sinun on avattava NGINX-virtuaalikoneen tiedosto FastCGI-kokoonpanolla, jonka haluat muuttaa uuteen pooliin – tai pikemminkin muodostaa yhteyden uuteen sokettiin.
Oletusarvoisesti Ubuntu 14.04:ssä nämä tallennetaan kansioon /etc/nginx/sites-available, mutta ne voidaan määrittää myös muualle. Todennäköisesti tiedät parhaiten, missä virtuaalikoneen määritykset sijaitsevat ;-)
Avaa asiaankuuluva asetustiedosto suosikkitekstieditorissasi ja etsi fastcgi_pass-direktiivi (jonka on oltava sijaintikontekstissa), joka määrittää PHP-FPM-socketin. Sinun on muutettava tätä arvoa vastaamaan vaiheessa yksi tekemääsi uutta PHP-FPM-poolin kokoonpanoa, joten esimerkkiämme jatkamalla muuttaisit tämän muotoon:
Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Tallenna ja sulje sitten myös kyseinen tiedosto. Olet melkein valmis.
Osa 3 – Käynnistä PHP-FPM ja NGINX uudelleen
Jotta tekemäsi määritysmuutokset tulevat voimaan, käynnistä sekä PHP-FPM että NGINX uudelleen. Uudelleenkäynnistys voi riittää pelkän uudelleenkäynnistyksen sijaan, mutta minusta se on hieman kaoottinen prosessi riippuen muutetuista asetuksista. Tässä tapauksessa halusin vanhojen PHP-FPM:n lapsiprosessien kuolevan heti, joten PHP-FPM:n uudelleenkäynnistys oli tarpeen, mutta NGINX:lle uudelleenkäynnistys saattaa riittää. Kokeile itse.
sudo service nginx restart
Ja voilà, olet valmis. Jos teit kaiken oikein, muokkaamasi virtuaalikoneen pitäisi nyt käyttää uutta PHP-FPM-poolia eikä jakaa lapsiprosesseja minkään muun virtuaalikoneen kanssa.
