Miklix

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.


Ova stranica je mašinski prevedena sa engleskog jezika kako bi bila dostupna što većem broju ljudi. Nažalost, mašinsko prevođenje još uvek nije usavršena tehnologija, tako da može doći do grešaka. Ako želite, možete pogledati originalnu englesku verziju ovde:

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:

sudo cp www.conf mypool.conf

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:

listen = /var/run/php5-fpm.sock

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:

listen = /var/run/php5-fpm-mypool.sock

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 php5-fpm restart
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.

Podeli na BlueskiPodeli na FejsbukuPodeli na LinkedInPodeli na TumblrPodeli na XPodeli na LinkedInPin na Pinterest

Mikkel Christensen

O autoru

Mikkel Christensen
Mikel je tvorac i vlasnik miklix.com. Ima preko 20 godina iskustva kao profesionalni kompjuterski programer / programer i trenutno je zaposlen sa punim radnim vremenom za veliku evropsku IT korporaciju. Kada ne bloguje, on provodi svoje slobodno vreme na širokom spektru interesovanja, hobija i aktivnosti, što se u određenoj meri može odraziti na različite teme koje se obrađuju na ovoj veb stranici.