Comment configurer des pools PHP-FPM séparés dans NGINX
Publié : 15 février 2025 à 11:52:29 UTC
Dans cet article, je passe en revue les étapes de configuration nécessaires pour exécuter plusieurs pools PHP-FPM et y connecter NGINX via FastCGI, permettant la séparation et l'isolation des processus entre les hôtes virtuels.
How to Set Up Separate PHP-FPM Pools in NGINX
Les informations contenues dans cet article sont basées sur NGINX 1.4.6 et PHP-FPM 5.5.9 exécutés sur Ubuntu Server 14.04 x64. Elles peuvent ou non être valables pour d'autres versions. (Mise à jour : je peux confirmer qu'à partir d'Ubuntu Server 24.04, PHP-FPM 8.3 et NGINX 1.24.0, toutes les instructions de cet article fonctionnent toujours)
Il existe un certain nombre d'avantages à configurer plusieurs pools de processus enfants PHP-FPM plutôt que d'exécuter tous les processus dans le même pool. La sécurité, la séparation/isolation et la gestion des ressources sont parmi les principaux avantages.
Quelle que soit votre motivation, cet article vous aidera à y parvenir :-)
Partie 1 – Configurer un nouveau pool PHP-FPM
Tout d'abord, vous devez localiser le répertoire dans lequel PHP-FPM stocke ses configurations de pool. Sur Ubuntu 14.04, il s'agit par défaut de /etc/php5/fpm/pool.d. Il existe probablement déjà un fichier appelé www.conf , qui contient la configuration du pool par défaut. Si vous n'avez pas encore consulté ce fichier, il y a de fortes chances que vous deviez le parcourir et modifier les paramètres qu'il contient pour votre configuration, car les valeurs par défaut sont destinées à un serveur assez peu puissant, mais pour l'instant, faites-en simplement une copie afin de ne pas avoir à recommencer à zéro :
Bien sûr, remplacez « mypool » par le nom que vous souhaitez donner à votre piscine.
Ouvrez maintenant le nouveau fichier à l'aide de nano ou de l'éditeur de texte de votre choix et ajustez-le en fonction de vos besoins. Vous souhaiterez probablement modifier les numéros de processus enfants et éventuellement l'utilisateur et le groupe sous lesquels le pool s'exécute, mais les deux paramètres que vous devez absolument modifier sont le nom du pool et le socket qu'il écoute, sinon il entrera en conflit avec le pool existant et les choses cesseront de fonctionner.
Le nom du pool est situé en haut du fichier, entre crochets. Par défaut, c'est [www] . Modifiez-le comme vous le souhaitez ; je suggère de lui donner le même nom que celui que vous avez donné au fichier de configuration, donc pour les besoins de cet exemple, remplacez-le par [mypool] . Si vous ne le modifiez pas, il semble que PHP-FPM ne chargera que le premier fichier de configuration portant ce nom, ce qui risque de casser des choses.
Vous devez ensuite modifier le socket ou l'adresse que vous écoutez, qui est défini par la directive listen . Par défaut, PHP-FPM utilise des sockets Unix, donc votre directive listen ressemblera probablement à ceci :
Vous pouvez le modifier avec le nom valide que vous souhaitez, mais encore une fois, je suggère de vous en tenir à quelque chose de similaire au nom du fichier de configuration, vous pouvez donc par exemple le définir sur :
Très bien, enregistrez le fichier et quittez l’éditeur de texte.
Partie 2 – Mettre à jour la configuration de l’hôte virtuel NGINX
Vous devez maintenant ouvrir le fichier hôte virtuel NGINX avec la configuration FastCGI que vous souhaitez modifier vers un nouveau pool – ou plutôt, vous connecter au nouveau socket.
Par défaut sur Ubuntu 14.04, ces éléments sont stockés dans /etc/nginx/sites-available, mais peuvent également être définis ailleurs. Vous savez probablement mieux où se trouvent vos configurations d'hôte virtuel ;-)
Ouvrez le fichier de configuration approprié dans votre éditeur de texte préféré et recherchez la directive fastcgi_pass (qui doit être dans un contexte d'emplacement) définissant le socket PHP-FPM. Vous devez modifier cette valeur pour qu'elle corresponde à la nouvelle configuration du pool PHP-FPM que vous avez effectuée à l'étape 1. Pour continuer notre exemple, vous devez donc la modifier comme suit :
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Ensuite, enregistrez et fermez également ce fichier. Vous avez presque terminé maintenant.
Partie 3 – Redémarrer PHP-FPM et NGINX
Pour appliquer les modifications de configuration que vous avez effectuées, redémarrez PHP-FPM et NGINX. Il peut être suffisant de recharger au lieu de redémarrer , mais je trouve que c'est un peu aléatoire, selon les paramètres modifiés. Dans ce cas particulier, je voulais que les anciens processus enfants de PHP-FPM s'éteignent immédiatement, donc redémarrer PHP-FPM était nécessaire, mais pour NGINX, un rechargement peut être suffisant. Essayez par vous-même.
sudo service nginx restart
Et voilà, vous avez terminé. Si vous avez tout fait correctement, l'hôte virtuel que vous avez modifié devrait maintenant utiliser le nouveau pool PHP-FPM et ne pas partager de processus enfants avec d'autres hôtes virtuels.