Miklix

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.


Cette page a été traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie parfaite, et des erreurs peuvent donc se produire. Si vous préférez, vous pouvez consulter la version originale en anglais ici :

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 :

sudo cp www.conf mypool.conf

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 :

listen = /var/run/php5-fpm.sock

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 :

listen = /var/run/php5-fpm-mypool.sock

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 php5-fpm restart
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.

Partager sur BlueskyPartager sur FacebookPartager sur LinkedInPartager sur TumblrPartager sur XPartager sur LinkedInÉpingler sur Pinterest

Mikkel Bang Christensen

A propos de l'auteur

Mikkel Bang Christensen
Mikkel est le créateur et le propriétaire de miklix.com. Il a plus de 20 ans d'expérience en tant que programmeur informatique professionnel/développeur de logiciels et travaille actuellement à plein temps pour une grande entreprise européenne de TI. Lorsqu'il ne blogue pas, il consacre son temps libre à un large éventail d'intérêts, de passe-temps et d'activités, ce qui peut se refléter dans une certaine mesure dans la variété des sujets abordés sur ce site web.