PHP-FPM : sites PHP
Installer PHP-FPM sur VDS, l'intégrer à Nginx, choisir le nombre de processus selon la mémoire de votre palier et résoudre les erreurs 502 et 504.
Mis à jour le 23 août 2026
PHP-FPM est un service distinct qui exécute le code PHP ; le serveur web ne fait que lui transmettre les requêtes. C'est ainsi que fonctionnent WordPress, Laravel, Bitrix et la quasi-totalité des projets en PHP.
Installation
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
Sur AlmaLinux et CentOS Stream, utilisez dnf install -y php-fpm php-mysqlnd ... ; le service s'appelle php-fpm. Pour vérifier la version exacte, exécutez :
php -v
systemctl list-units | grep fpm
Connexion à Nginx
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
Ouvrez /info.php, assurez-vous que PHP fonctionne, puis supprimez immédiatement le fichier : il expose la version, les chemins et la liste des modules.
Combien de processus conserver
Chaque processus PHP worker consomme 40 à 120 Mo. Dimensionnez-le selon le palier, en laissant de la mémoire pour la base de données et le système. Cela se configure dans /etc/php/8.3/fpm/pool.d/www.conf :
| Palier | Mémoire | pm.max_children raisonnable |
|---|---|---|
| VDS-1 | 2 Go | 5 |
| VDS-2 | 4 Go | 10 |
| VDS-3 | 8 Go | 20 |
| VDS-5 | 24 Go | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
pm.max_requests redémarre un processus après N requêtes, afin que les fuites de mémoire dans le code ne s'accumulent pas jusqu'à la fin de la semaine.
Valeurs php.ini utiles pour FPM : memory_limit = 256M, upload_max_filesize = 64M, post_max_size = 64M, opcache.enable = 1.
Après modification : systemctl reload php8.3-fpm.
Erreurs courantes
| Symptôme | Cause | Que faire |
|---|---|---|
502 Bad Gateway | Chemin de socket erroné ou service arrêté | Vérifiez fastcgi_pass par rapport au fichier réel dans /run/php/ |
504 Gateway Time-out | Le script s'exécute plus longtemps que le délai imparti | Augmentez fastcgi_read_timeout et max_execution_time |
| Le navigateur télécharge le fichier au lieu de l'exécuter | Le bloc location ~ \.php$ n'a pas correspondu | Vérifiez l'ordre des blocs location et exécutez nginx -t |
server reached pm.max_children dans le journal | Pas assez de processus | Augmentez la limite si la mémoire le permet, sinon passez au palier supérieur |
Journaux : /var/log/php8.3-fpm.log et /var/log/nginx/error.log.
Créez la base de données du site sous un utilisateur distinct disposant de droits uniquement sur son propre schéma — utilisateurs et privilèges. Utiliser le compte
rootdans la configuration de votre CMS est le moyen le plus sûr de perdre toutes vos bases de données d'un coup.