Php-fpm
| Fiche express | |
|---|---|
| Domaine | Gestionnaire de processus PHP (FastCGI) |
| Service | php-fpm
|
| Fichier de conf (pool) | /etc/php-fpm.d/www.conf
|
| Socket/port | Unix socket ou TCP, au choix par pool |
| Voir aussi | Modules apache · Proxy apache |
PHP-FPM (FastCGI Process Manager) est une implémentation de gestionnaire de processus
FastCGI pour PHP. Il remplace le mode mod_php (PHP exécuté dans le process
Apache) par des processus PHP indépendants, ce qui apporte un gain de performance et de
robustesse notable : les workers PHP peuvent redémarrer sans affecter le serveur web, être
isolés par utilisateur/groupe pool par pool, et être placés derrière n'importe quel serveur
web ou reverse proxy faisant du FastCGI.
Positionnement typique dans une chaîne de requête :
client → cache/reverse proxy (Varnish, Nginx) → Nginx/Apache → PHP-FPM → moteur PHP / SQL
Configuration d'un pool
PHP-FPM organise ses workers en pools — chacun avec son propre fichier de configuration, pouvant écouter sur un socket ou un port différent, ce qui permet d'isoler plusieurs applications sur la même machine avec des utilisateurs système distincts.
; /etc/php-fpm.d/www.conf
[www]
listen = /var/run/php-fpm/php-fpm.sock
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
pm = dynamic fait varier le nombre de workers entre pm.min_spare_servers
et pm.max_spare_servers selon la charge, avec un plafond dur à
pm.max_children — à dimensionner en fonction de la mémoire disponible (chaque
worker consomme la mémoire d'un interpréteur PHP complet).
Charger des variables d'environnement
Pour injecter un fichier de variables d'environnement dans les workers PHP-FPM (utile pour séparer la configuration applicative du code), passer par un override systemd :
# /etc/systemd/system/php-fpm.service.d/override.conf
[Service]
EnvironmentFile=/etc/monapp/environment
systemctl daemon-reload
systemctl restart php-fpm
(la source ne précisait que la ligne EnvironmentFile — le fichier override doit
être placé sous une section [Service] pour être pris en compte par systemd.)
Voir aussi
- Modules apache — configuration côté Apache (proxy vers FPM)
- Proxy apache — reverse proxy devant PHP-FPM