Kako postaviti odvojene PHP-FPM bazene u NGINX
Objavio: 19. mart 2025. 21:27:25 UTC
U ovom članku prelazim na korake konfiguracije potrebne za pokretanje više PHP-FPM bazena i povezivanje NGINKS-a sa njima preko FastCGI-a, omogućavajući razdvajanje procesa i izolaciju između virtuelnih domaćina.
How to Set Up Separate PHP-FPM Pools in NGINX
Informacije u ovom postu temelje se na NGINX 1.4.6 i PHP-FPM 5.5.9 koji rade na Ubuntu Serveru 14.04 x64. Može biti važeće ili ne važeće za druge verzije. (Ažuriranje: mogu potvrditi da od Ubuntu Servera 24.04, PHP-FPM 8.3 i NGINX 1.24.0, sve instrukcije u ovom postu i dalje funkcionišu)
Postoji nekoliko prednosti u postavljanju više PHP-FPM child proces pool-ova, umesto da sve bude u istom pool-u. Sigurnost, separacija/izolacija i upravljanje resursima padaju na pamet kao nekoliko glavnih.
Bez obzira na vašu motivaciju, ovaj post će vam pomoći da to uradite :-)
Deo 1 – Postavite novi PHP-FPM pool
Prvo, morate pronaći direktorijum u kojem PHP-FPM čuva svoje konfiguracije pool-a. Na Ubuntu 14.04, ovo je /etc/php5/fpm/pool.d po defaultu. Verovatno već postoji fajl pod nazivom www.conf, koji sadrži konfiguraciju za podrazumevani pool. Ako ga još niste pogledali, verovatno biste trebali da ga pregledate i podesite postavke prema vašem podešavanju, jer su podrazumevana podešavanja za prilično slabo opremljen server, ali za sada jednostavno napravite kopiju, tako da ne moramo početi od nule:
Naravno, zamenite “mypool” sa onim što želite da se zove vaš pool.
Sada otvorite novi fajl koristeći nano ili neki drugi tekst editor koji preferirate i prilagodite ga svom cilju. Verovatno ćete želeti da promenite broj child procesa i možda korisnika i grupu pod kojom pool radi, ali dva podešavanja koja morate promeniti su ime pool-a i socket na kojem on sluša, inače će doći do konflikta sa postojećim pool-om i stvari neće funkcionisati.
Ime pool-a je blizu vrha fajla, uokvireno u uglaste zagrade. Podrazumevano je [www]. Promenite ovo u ono što želite; predlažem da bude isto kao što ste nazvali konfiguracioni fajl, tako da u ovom primeru promenite u [mypool]. Ako to ne promenite, čini se da PHP-FPM učita samo prvi konfiguracioni fajl sa tim imenom, što verovatno neće funkcionisati.
Zatim morate promeniti socket ili adresu na kojoj slušate, što je definisano listen direktivom. Podrazumevano, PHP-FPM koristi Unix socket-e, pa će vaša listen direktiva verovatno izgledati ovako:
Možete je promeniti u bilo koje validno ime koje želite, ali opet, predlažem da ostanete pri nečemu sličnom imenu konfiguracionog fajla, tako da možete, na primer, postaviti na:
U redu, sačuvajte fajl i izađite iz tekst editora.
Deo 2 – Ažurirajte NGINX virtual host konfiguraciju
Sada morate otvoriti NGINX virtual host fajl sa FastCGI konfiguracijom koji želite da promenite u novi pool – ili bolje rečeno, povežete ga sa novim socket-om.
Podrazumevano na Ubuntu 14.04, ovi se čuvaju u /etc/nginx/sites-available, ali takođe mogu biti definisani na drugom mestu. Verovatno najbolje znate gde se nalaze vaše virtual host konfiguracije ;-)
Otvorite relevantni konfiguracioni fajl u svom omiljenom tekst editoru i potražite fastcgi_pass direktivu (koja mora biti u kontekstu lokacije) koja definiše PHP-FPM socket. Morate promeniti ovu vrednost kako bi odgovarala novoj PHP-FPM pool konfiguraciji koju ste napravili u prvom koraku, pa ćete u našem primeru promeniti ovo u:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Zatim sačuvajte i zatvorite taj fajl. Gotovo ste sada.
Deo 3 – Restartujte PHP-FPM i NGINX
Da biste primenili promene u konfiguraciji koje ste napravili, restartujte i PHP-FPM i NGINX. Možda će biti dovoljno da reloadujete umesto da restartujete, ali smatram da to ponekad zavisi od postavki koje su promenjene. U ovom slučaju, želeo sam da stari PHP-FPM child procesi odmah umru, pa je bilo potrebno restartovati PHP-FPM, dok za NGINX možda bude dovoljno da samo reloadujete. Isprobajte sami.
sudo service nginx restart
I evo, gotovi ste. Ako ste sve ispravno uradili, virtual host koji ste modifikovali sada treba da koristi novi PHP-FPM pool i neće deliti child procese sa bilo kojim drugim virtual host-ovima.