Cum să configurați pool-uri PHP-FPM separate în NGINX
Publicat: 15 februarie 2025 la 11:52:57 UTC
În acest articol, trec peste pașii de configurare necesari pentru a rula mai multe pool-uri PHP-FPM și pentru a conecta NGINX la acestea prin FastCGI, permițând separarea proceselor și izolarea între gazdele virtuale.
How to Set Up Separate PHP-FPM Pools in NGINX
Informațiile din această postare se bazează pe NGINX 1.4.6 și PHP-FPM 5.5.9 care rulează pe Ubuntu Server 14.04 x64. Poate fi valabil sau nu pentru alte versiuni. (Actualizare: pot confirma că începând cu Ubuntu Server 24.04, PHP-FPM 8.3 și NGINX 1.24.0, toate instrucțiunile din această postare încă funcționează)
Există o serie de avantaje în a configura mai multe pool-uri de procese copii PHP-FPM, în loc să rulați totul în același pool. Securitatea, separarea/izolarea și gestionarea resurselor îmi vin în minte ca fiind câteva dintre cele mai importante.
Indiferent de motivația ta, această postare te va ajuta să o faci :-)
Partea 1 – Configurați un nou pool PHP-FPM
Mai întâi, trebuie să localizați directorul în care PHP-FPM își stochează configurațiile pool-ului. Pe Ubuntu 14.04, acesta este implicit /etc/php5/fpm/pool.d. Probabil că există deja un fișier numit www.conf , care deține configurația pentru pool-ul implicit. Dacă nu v-ați uitat la acel fișier înainte de a exista șanse, ar trebui să-l parcurgeți și să modificați setările din el pentru configurarea dvs., deoarece valorile implicite sunt pentru un server destul de slab alimentat, dar pentru moment faceți o copie a acestuia, astfel încât să nu fie nevoie să începem de la zero:
Desigur, înlocuiți „mypool” cu orice doriți să se numească piscina dvs.
Acum deschideți noul fișier folosind nano sau orice editor de text pe care îl preferați și ajustați-l pentru a se potrivi scopului dvs. Probabil că veți dori să modificați numerele de proces copil și, eventual, în ce utilizator și grup rulează pool-ul, dar cele două setări pe care trebuie neapărat să le modificați sunt numele pool-ului și socket-ul pe care îl ascultă, altfel va intra în conflict cu pool-ul existent și lucrurile nu vor mai funcționa.
Numele pool-ului este aproape de partea de sus a fișierului, cuprins între paranteze drepte. Implicit este [www] . Schimbați-l în ceea ce doriți; Vă sugerez același lucru cu care ați numit fișierul de configurare, așa că, de dragul acestui exemplu, schimbați-l în [mypool] . Dacă nu îl schimbați, se pare că PHP-FPM va încărca doar primul fișier de configurare cu acel nume, ceea ce este probabil să rupă lucrurile.
Apoi trebuie să schimbați socket-ul sau adresa pe care o ascultați, care este definită de directiva listen . În mod implicit, PHP-FPM utilizează socket-uri Unix, astfel încât directiva dvs. de ascultare va arăta probabil astfel:
Îl puteți schimba cu orice nume valid doriți, dar, din nou, vă sugerez să rămâneți cu ceva similar cu numele fișierului de configurare, astfel încât să îl puteți seta, de exemplu, la:
În regulă, salvați fișierul și ieșiți din editorul de text.
Partea 2 – Actualizați configurația gazdei virtuale NGINX
Acum trebuie să deschideți fișierul gazdă virtuală NGINX cu configurația FastCGI pe care doriți să o modificați la un nou pool - sau mai degrabă, să vă conectați la noul socket.
În mod implicit, pe Ubuntu 14.04, acestea sunt stocate în /etc/nginx/sites-available, dar pot fi definite și în altă parte. Probabil că știi cel mai bine unde se află configurațiile de gazdă virtuală ;-)
Deschideți fișierul de configurare relevant în editorul de text preferat și căutați directiva fastcgi_pass (care trebuie să fie într-un context de locație) care definește socket-ul PHP-FPM. Trebuie să modificați această valoare astfel încât să se potrivească cu noua configurație a pool-ului PHP-FPM pe care ați făcut-o la pasul unu, așa că continuând exemplul nostru, veți schimba aceasta în:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Apoi salvați și închideți și acel fișier. Aproape ai terminat acum.
Partea 3 – Reporniți PHP-FPM și NGINX
Pentru a aplica modificările de configurare pe care le-ați făcut, reporniți atât PHP-FPM, cât și NGINX. Poate fi suficient să reîncărcați în loc să reporniți , dar mi se pare un pic cam greșit, în funcție de setările care sunt modificate. În cazul particular, am vrut ca vechile procese copil PHP-FPM să dispară imediat, așa că era necesară repornirea PHP-FPM, dar pentru NGINX o reîncărcare poate fi suficientă. Încercați-l singur.
sudo service nginx restart
Și voila, ai terminat. Dacă ați făcut totul corect, gazda virtuală pe care ați modificat-o ar trebui să folosească acum noul pool PHP-FPM și să nu partajeze procesele copil cu alte gazde virtuale.