Kako postaviti odvojene PHP-FPM bazene u NGINX-u
Objavljeno: 15. februar 2025. u 11:55:28 UTC
U ovom članku, prolazim kroz korake konfiguracije potrebne za pokretanje više PHP-FPM bazena i povezivanje NGINX-a sa njima preko FastCGI-a, omogućavajući razdvajanje procesa i izolaciju između virtualnih hostova.
How to Set Up Separate PHP-FPM Pools in NGINX
Informacije u ovom postu su bazirane na NGINX 1.4.6 i PHP-FPM 5.5.9 koji rade na Ubuntu Serveru 14.04 x64. Može ili ne mora vrijediti za druge verzije. (Update: I can confirm that as of Ubuntu Server 24.04, PHP-FPM 8.3 and NGINX 1.24.0, all of the instructions in this post still works)
Postoji niz prednosti postavljanja više PHP-FPM podređenih baza procesa umjesto pokretanja svega u istom bazenu. Sigurnost, razdvajanje/izolacija i upravljanje resursima padaju mi na pamet kao nekoliko glavnih.
Bez obzira na to koja je vaša motivacija, ovaj post će vam pomoći u tome :-)
Dio 1 – Postavite novi PHP-FPM bazen
Prvo, morate locirati direktorij u kojem PHP-FPM pohranjuje svoje konfiguracije bazena. Na Ubuntu 14.04, ovo je /etc/php5/fpm/pool.d po defaultu. Vjerovatno već postoji datoteka koja se zove www.conf, koja sadrži konfiguraciju za podrazumevani bazen. Ako niste pogledali taj fajl ranije, velike su šanse da biste trebali da prođete kroz njega i podesite postavke u njemu za vaše podešavanje jer su podrazumevane vrednosti za prilično slab server, ali za sada samo napravite kopiju tako da ne moramo da počinjemo od nule:
Naravno, zamijenite "mypool" s onim što želite da se vaš bazen zove.
Sada otvorite novu datoteku koristeći nano ili bilo koji uređivač teksta koji preferirate i prilagodite je kako bi odgovarala vašoj svrsi. Vjerovatno ćete htjeti podesiti brojeve podređenih procesa i eventualno pod kojim korisnikom i grupom bazen radi, ali dvije postavke koje apsolutno morate promijeniti su ime bazena i utičnica koju sluša, inače će biti u sukobu s postojećim bazenom i stvari će prestati raditi.
Ime bazena je pri vrhu datoteke, zatvoreno u uglatim zagradama. Po defaultu je [www]. Promijenite ovo na što god želite; Predlažem isto kao što ste nazvali konfiguracijsku datoteku, pa je zbog ovog primjera promijenite u [mypool]. Ako ga ne promijenite, čini se da će PHP-FPM učitati samo prvu konfiguracijsku datoteku s tim imenom, što će vjerojatno pokvariti stvari.
Zatim morate promijeniti utičnicu ili adresu koju slušate, a koja je definirana direktivom slušanja . Po defaultu, PHP-FPM koristi Unix socketove tako da će vaša direktiva listen vjerovatno izgledati ovako:
Možete ga promijeniti u bilo koje valjano ime koje želite, ali opet, predlažem da se držite nečeg sličnog konfiguracijskom nazivu datoteke, tako da ga možete na primjer podesiti na:
U redu, onda sačuvaj fajl i izađi iz uređivača teksta.
Dio 2 – Ažuriranje konfiguracije NGINX virtualnog hosta
Sada morate otvoriti NGINX datoteku virtualnog hosta sa FastCGI konfiguracijom koju želite promijeniti u novi bazen - ili bolje rečeno, spojiti se na novu utičnicu.
Po defaultu na Ubuntu 14.04, oni su pohranjeni pod /etc/nginx/sites-available, ali mogu biti definisani i negdje drugdje. Vjerovatno najbolje znate gdje se nalaze vaše konfiguracije virtualnog hosta ;-)
Otvorite relevantnu konfiguracijsku datoteku u vašem omiljenom uređivaču teksta i potražite direktivu fastcgi_pass (koja mora biti u kontekstu lokacije) koja definira PHP-FPM utičnicu. Morate promijeniti ovu vrijednost tako da odgovara novoj PHP-FPM konfiguraciji bazena koju ste napravili u prvom koraku, tako da nastavljajući naš primjer promijenili biste ovo u:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Onda sačuvaj i zatvori i taj fajl. Skoro si završio.
Dio 3 – Ponovno pokretanje PHP-FPM-a i NGINX-a
Da biste primijenili promjene konfiguracije koje ste napravili, ponovno pokrenite i PHP-FPM i NGINX. Možda je dovoljno za ponovno učitavanje umjesto ponovnog pokretanja, ali smatram da je to malo pogodak i promašaj, ovisno o tome koje su postavke promijenjene. U konkretnom slučaju, želio sam da stari PHP-FPM podređeni procesi odmah umru, tako da je ponovno pokretanje PHP-FPM bilo potrebno, ali za NGINX ponovno učitavanje može biti dovoljno. Probajte sami.
sudo service nginx restart
I voila, gotovi ste. Ako ste sve uradili ispravno, virtualni host koji ste modificirali bi sada trebao koristiti novi PHP-FPM pool i ne dijeliti podređene procese sa bilo kojim drugim virtualnim hostovima.