PHP FastCGI Process Manager – PHP-FPM
PHP est l’un des langages de programmation les plus utilisés pour le développement web. Lorsqu’il s’agit de gérer efficacement de gros volumes de trafic, les performances de PHP peuvent avoir un impact significatif sur la vitesse globale et la réactivité des sites web. C’est là que PHP FastCGI Process Manager (PHP-FPM) entre en jeu. PHP-FPM est un gestionnaire PHP alternatif largement adopté qui fournit une méthode performante d’exécution des scripts PHP.
Dans cet article, nous verrons ce qu’est PHP-FPM, pourquoi il est essentiel pour optimiser les performances des serveurs web et comment le configurer pour vos applications basées sur PHP.
Qu’est-ce que PHP-FPM ?
PHP-FPM, ou PHP FastCGI Process Manager, est une implémentation de FastCGI pour les scripts PHP. FastCGI est un protocole utilisé pour améliorer les performances des serveurs web en traitant les requêtes plus efficacement que le CGI (Common Gateway Interface) standard. Alors que le CGI crée un nouveau processus pour chaque requête (ce qui entraîne une forte consommation de ressources), FastCGI maintient un pool de processus de travail prêts à traiter plusieurs requêtes, réduisant ainsi la charge de travail.
PHP-FPM ajoute une couche de gestion de processus au-dessus de FastCGI, permettant des fonctionnalités telles que la mise en commun de processus, la création de processus à la demande, l’arrêt progressif, et la capacité à gérer des environnements à fort trafic avec facilité. C’est maintenant le gestionnaire PHP standard de facto pour de nombreux serveurs web modernes, y compris NGINX et Apache.
Pourquoi utiliser PHP-FPM ?
- Amélioration des performances : PHP-FPM peut gérer plus de requêtes simultanées avec moins de ressources, réduisant ainsi la charge du serveur et accélérant les temps de réponse. Ceci est particulièrement bénéfique pour les sites web à fort trafic ou les applications qui connaissent des pics de trafic soudains.
- Gestion des processus : PHP-FPM permet une gestion fine des processus, vous donnant le contrôle sur la façon dont PHP traite les requêtes. Il utilise un pool de travailleurs qui peut être ajusté en fonction de la charge de travail attendue, garantissant ainsi une utilisation efficace des ressources du serveur.
- Meilleure utilisation des ressources : Puisque PHP-FPM met en commun des processus, il peut répondre à plusieurs requêtes en utilisant les mêmes travailleurs, minimisant ainsi le besoin de créer et de terminer des processus en permanence. Cela améliore l’utilisation de la mémoire et l’efficacité du processeur.
- Dégradation progressive : Lorsqu’il est configuré correctement, PHP-FPM peut se dégrader de manière gracieuse en réduisant le nombre de processus actifs si le serveur devient surchargé, évitant ainsi un crash complet.
- Fonctionnalités avancées : PHP-FPM inclut des fonctionnalités avancées telles que le slow-log pour le débogage, le lancement adaptatif de processus, et les rapports d’état, qui fournissent des informations sur les performances et la santé de vos applications PHP.
Caractéristiques principales de PHP-FPM
- Pools de processus : PHP-FPM vous permet de définir plusieurs pools de processus PHP. Chaque pool peut être configuré avec des paramètres différents, ce qui vous permet d’exécuter différentes applications PHP avec des exigences de trafic variées sur le même serveur.
- Création adaptative de processus : PHP-FPM peut automatiquement adapter le nombre de processus de travail en fonction des niveaux de trafic. Il démarre avec un nombre minimum de travailleurs et peut augmenter la taille du pool si nécessaire, sans gaspiller de ressources pendant les périodes de faible trafic.
- Journal lent : La fonction de journal lent de PHP-FPM enregistre les requêtes qui dépassent un temps d’exécution prédéfini. Elle aide les développeurs à identifier et à résoudre les goulets d’étranglement dans leur code PHP.
- Page d’état : PHP-FPM fournit une page d’état intégrée qui donne des informations en temps réel sur l’état du pool, les travailleurs actifs, les travailleurs inactifs et d’autres mesures qui peuvent être utilisées pour surveiller les performances.
- Arrêt en douceur : PHP-FPM peut terminer les processus de manière gracieuse, permettant aux requêtes en cours de se terminer avant de s’arrêter. Cela permet d’éviter l’arrêt brutal des scripts en cours d’exécution et d’assurer une meilleure expérience utilisateur.
Comment fonctionne PHP-FPM
PHP-FPM fonctionne comme un serveur FastCGI autonome qui est intégré à un serveur web, tel que NGINX ou Apache, pour servir les scripts PHP. Lorsqu’une requête arrive, le serveur web transmet la requête PHP au service PHP-FPM, qui gère un pool de processus de travail pour exécuter le code PHP et renvoyer le résultat au serveur web pour qu’il le transmette au client.
Voici un exemple simplifié de la manière dont PHP-FPM traite une requête :
- Demande du client : Un utilisateur demande une page web contenant du code PHP.
- Le serveur web reçoit la requête : Le serveur web (NGINX ou Apache) reçoit la requête et la transmet au service PHP-FPM en utilisant le protocole FastCGI.
- Le processeur PHP-FPM traite la requête : L’un des processus du pool PHP-FPM traite la requête, exécute le script PHP et renvoie le résultat.
- Réponse renvoyée : Le serveur web reçoit la réponse et la renvoie au client sous la forme du code HTML final.
Mise en place et configuration de PHP-FPM
Etape 1 : Installer PHP-FPM
Pour la plupart des distributions Linux, PHP-FPM peut être installé via les gestionnaires de paquets. Voici les commandes pour les systèmes les plus courants :
# Pour Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# Pour CentOS/RHEL
sudo yum install php-fpm
Une fois installé, vous pouvez démarrer le service PHP-FPM :
sudo systemctl start php-fpm
Etape 2 : Configurer les pools PHP-FPM
Le fichier de configuration principal de PHP-FPM est typiquement situé dans /etc/php/7.x/fpm/pool.d / ou /etc/php-fpm.d/ en fonction de votre distribution et de la version de PHP. Chaque pool est défini dans son propre fichier, généralement nommé d’après le site web ou l’application qu’il dessert. Voici un exemple de configuration d’un pool :
[www]
utilisateur = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamique
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dynamic : Le gestionnaire de processus peut ajuster dynamiquement le nombre de processus travailleurs en fonction de la demande.
- pm.max_children : Nombre maximal de processus travailleurs pouvant être créés pour traiter les demandes.
- pm.start_servers : Le nombre de processus travailleurs qui démarrent lorsque PHP-FPM est lancé.
- pm.min_spare_servers et pm.max_spare_servers : Définissent le nombre minimum et maximum de travailleurs inactifs, permettant à PHP-FPM d’adapter les ressources en fonction de la charge.
- pm.max_requests : Le nombre maximum de requêtes qu’un travailleur peut traiter avant d’être interrompu et remplacé. Cela permet d’éviter les fuites de mémoire dans les scripts de longue durée.
Étape 3 : Configuration du serveur Web pour l’utilisation de PHP-FPM
Pour NGINX :
Dans votre fichier de configuration NGINX (par exemple, /etc/nginx/sites-available/example.com), configurez PHP-FPM comme gestionnaire PHP :
server {
listen 80 ;
nom_du_serveur exemple.com ;
root /var/www/html ;
location / {
try_files $uri $uri/ =404 ;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf ;
fastcgi_pass unix:/run/php/php7.4-fpm.sock ;
}
}
Pour activer PHP-FPM dans Apache, assurez-vous que le module mod_proxy_fcgi est activé :
sudo a2enmod proxy_fcgi setenvif
Mettez ensuite à jour la configuration de votre hôte virtuel Apache :
<Hôte virtuel *:80>
Nom du serveur example.com
DocumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
Étape 4 : Test de la configuration
Après avoir configuré PHP-FPM et votre serveur web, redémarrez les services pour appliquer les changements :
# Pour NGINX
sudo systemctl restart nginx
# Pour Apache
sudo systemctl restart apache2
Pour vérifier que PHP-FPM fonctionne, créez un fichier phpinfo.php dans le répertoire racine de votre site web :
?php
phpinfo() ;
?>
Visitez le fichier dans votre navigateur (par exemple, http://example.com/phpinfo.php) pour voir si PHP-FPM est listé comme gestionnaire.
Conclusion
PHP-FPM est un outil essentiel pour optimiser les performances de PHP, en particulier pour les sites web à fort trafic. Il offre des avantages significatifs par rapport aux gestionnaires PHP traditionnels en gérant efficacement les processus, en améliorant l’utilisation des ressources du serveur, et en offrant des fonctionnalités avancées telles que la mise à l’échelle adaptative des processus et la journalisation lente. En configurant PHP-FPM pour répondre à vos besoins spécifiques, vous pouvez vous assurer que vos applications PHP fonctionnent de manière fluide et efficace, même en cas de forte charge.
En suivant les étapes de ce guide, vous devriez être en mesure de configurer et d’optimiser PHP-FPM pour vos projets PHP.