Manager de proces PHP FastCGI – PHP-FPM
PHP este unul dintre cele mai utilizate limbaje de programare pentru dezvoltarea web. Atunci când vine vorba de gestionarea eficientă a volumelor mari de trafic, performanța PHP poate avea un impact semnificativ asupra vitezei generale și a capacității de reacție a site-urilor web. Aici intervine PHP FastCGI Process Manager (PHP-FPM). PHP-FPM este un manager PHP alternativ adoptat pe scară largă, care oferă o metodă de înaltă performanță de executare a scripturilor PHP.
În acest articol, vom analiza ce este PHP-FPM, de ce este esențial pentru optimizarea performanței serverului web și cum să îl configurați pentru aplicațiile dvs. bazate pe PHP.
Ce este PHP-FPM?
PHP-FPM, sau PHP FastCGI Process Manager, este o implementare a FastCGI pentru scripturile PHP. FastCGI este un protocol utilizat pentru a îmbunătăți performanța serverelor web prin gestionarea cererilor mai eficient decât standardul CGI (Common Gateway Interface). În timp ce CGI creează un proces nou pentru fiecare cerere (ceea ce duce la un consum ridicat de resurse), FastCGI păstrează un grup de procese de lucru pregătite să gestioneze mai multe cereri, reducând astfel cheltuielile generale.
PHP-FPM adaugă un strat de gestionare a proceselor peste FastCGI, permițând caracteristici precum gruparea proceselor, generarea la cerere a lucrătorilor, închiderea grațioasă și capacitatea de a gestiona cu ușurință medii cu trafic ridicat. Acesta este în prezent gestionarul PHP standard de facto pentru multe servere web moderne, inclusiv NGINX și Apache.
De ce să utilizați PHP-FPM?
- Performanță îmbunătățită: PHP-FPM poate gestiona mai multe cereri concurente cu mai puține resurse, reducând încărcarea serverului și accelerând timpii de răspuns. Acest lucru este benefic în special pentru site-urile cu trafic mare sau pentru aplicațiile care se confruntă cu vârfuri bruște de trafic.
- Gestionarea proceselor: PHP-FPM permite gestionarea fină a proceselor, oferindu-vă control asupra modului în care PHP gestionează cererile. Acesta utilizează un grup de lucrători care poate fi ajustat pentru a se potrivi cu volumul de muncă așteptat, asigurând utilizarea eficientă a resurselor serverului.
- Utilizare mai bună a resurselor: Deoarece PHP-FPM grupează procesele, acesta poate servi mai multe cereri utilizând aceleași lucrători, minimizând necesitatea de a crea și termina procese în mod continuu. Acest lucru îmbunătățește utilizarea memoriei și eficiența CPU.
- Degradare grațioasă: Atunci când este configurat corespunzător, PHP-FPM se poate degrada grațios prin reducerea numărului de procese active în cazul în care serverul devine copleșit, împiedicând un crash complet.
- Caracteristici avansate: PHP-FPM include caracteristici avansate precum slow-log pentru depanare, generarea adaptivă a proceselor și raportarea stării, care oferă informații despre performanța și sănătatea aplicațiilor PHP.
Caracteristicile principale ale PHP-FPM
- Grupuri de procese: PHP-FPM vă permite să definiți mai multe grupuri de procese de lucru PHP. Fiecare grup poate fi configurat cu setări diferite, permițându-vă să rulați pe același server aplicații PHP diferite cu cerințe de trafic diferite.
- Generarea adaptivă a proceselor: PHP-FPM poate scala automat numărul de procese de lucru în funcție de nivelurile de trafic. Acesta începe cu un număr minim de lucrători și poate crește dimensiunea bazinului atunci când este necesar, fără a risipi resursele în timpul perioadelor cu trafic scăzut.
- Jurnal lent: Funcția slow log din PHP-FPM înregistrează cererile care depășesc un timp de execuție predefinit. Aceasta ajută dezvoltatorii să identifice și să rezolve blocajele de performanță din codul lor PHP.
- Pagina de stare: PHP-FPM oferă o pagină de stare încorporată care oferă informații în timp real despre starea grupului, lucrătorii activi, lucrătorii inactivi și alți parametri care pot fi utilizați pentru a monitoriza performanța.
- Închidere grațioasă: PHP-FPM poate încheia grațios procesele, permițând cererilor în curs să se finalizeze înainte de închidere. Acest lucru previne terminarea bruscă a scripturilor în execuție, asigurând o experiență mai bună pentru utilizator.
Cum funcționează PHP-FPM
PHP-FPM funcționează ca un server FastCGI autonom care este integrat cu un server web, cum ar fi NGINX sau Apache, pentru a servi scripturi PHP. Atunci când sosește o cerere, serverul web transmite cererea PHP către serviciul PHP-FPM, care gestionează un grup de procese lucrătoare pentru a executa codul PHP și a trimite rezultatul înapoi la serverul web pentru a fi livrat clientului.
Iată un flux simplificat al modului în care PHP-FPM gestionează o cerere:
- Cerere client: Un utilizator solicită o pagină web care conține cod PHP.
- Serverul web primește solicitarea: Serverul web (NGINX sau Apache) primește solicitarea și o transmite serviciului PHP-FPM utilizând protocolul FastCGI.
- Lucrătorul PHP-FPM procesează cererea: Unul dintre procesele lucrătoare din grupul PHP-FPM gestionează solicitarea, execută scriptul PHP și returnează rezultatul.
- Răspuns trimis înapoi: Serverul web primește rezultatul și îl trimite înapoi clientului ca HTML redat final.
Instalarea și configurarea PHP-FPM
Pasul 1: Instalarea PHP-FPM
Pentru majoritatea distribuțiilor Linux, PHP-FPM poate fi instalat prin intermediul managerilor de pachete. Iată comenzile pentru sistemele comune:
# Pentru Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# Pentru CentOS/RHEL
sudo yum install php-fpm
Odată instalat, puteți porni serviciul PHP-FPM:
sudo systemctl start php-fpm
Pasul 2: Configurarea bazinelor PHP-FPM
Principalul fișier de configurare pentru PHP-FPM se află de obicei în /etc/php/7.x/fpm/pool.d/ sau /etc/php-fpm.d/ , în funcție de distribuție și de versiunea PHP. Fiecare pool este definit în propriul său fișier, denumit de obicei după site-ul web sau aplicația pe care o deservește. Iată un exemplu de configurare pentru un pool:
[www]
utilizator = www-data
grup = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dinamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dinamic: Managerul de procese poate ajusta dinamic numărul de procese lucrătoare în funcție de cerere.
- pm.max_children: Numărul maxim de procese lucrătoare care pot fi generate pentru a gestiona cererile.
- pm.start_servers: Numărul de procese lucrătoare care pornesc atunci când PHP-FPM este lansat.
- pm.min_spare_servers și pm.max_spare_servers: Definesc numărul minim și maxim de lucrători inactivi, permițând PHP-FPM să scaleze resursele în funcție de sarcină.
- pm.max_requests: Numărul maxim de cereri pe care le poate gestiona un lucrător înainte de a fi oprit și înlocuit. Acest lucru ajută la prevenirea scurgerilor de memorie în scripturile care rulează mult timp.
Pasul 3: Configurarea serverului web pentru a utiliza PHP-FPM
Pentru NGINX:
În fișierul de configurare NGINX (de exemplu, /etc/nginx/sites-available/example.com), configurați PHP-FPM ca gestionar PHP:
server {
listen 80;
server_name example.com;
rădăcină /var/www/html;
locație / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
Pentru a activa PHP-FPM în Apache, asigurați-vă că modulul mod_proxy_fcgi este activat:
sudo a2enmod proxy_fcgi setenvif
Apoi actualizați configurația gazdei virtuale Apache:
ServerName example.com
DocumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
Pasul 4: Testarea configurației
După configurarea PHP-FPM și a serverului dvs. web, reporniți serviciile pentru a aplica modificările:
# Pentru NGINX
sudo systemctl restart nginx
# Pentru Apache
sudo systemctl restart apache2
Pentru a verifica dacă PHP-FPM funcționează, creați un fișier phpinfo.php în directorul rădăcină web:
?php
phpinfo();
?>
Vizitați fișierul în browserul dvs. (de exemplu, http://example.com/phpinfo.php) pentru a vedea dacă PHP-FPM este listat ca handler.
Concluzii
PHP-FPM este un instrument esențial pentru optimizarea performanței PHP, în special pentru site-urile cu trafic mare. Acesta oferă beneficii semnificative față de handlerii PHP tradiționali prin gestionarea eficientă a proceselor, prin îmbunătățirea utilizării resurselor serverului și prin oferirea unor caracteristici avansate precum scalarea adaptivă a proceselor și înregistrarea lentă. Prin configurarea PHP-FPM pentru a vă satisface nevoile specifice, vă puteți asigura că aplicațiile PHP rulează fără probleme și eficient, chiar și în condiții de sarcină mare.
Urmând pașii din acest ghid, ar trebui să fiți pe drumul cel bun către configurarea și optimizarea PHP-FPM pentru proiectele dvs. bazate pe PHP.