php-fpm — Exécution PHP
PHP-FPM (FastCGI Process Manager) est le gestionnaire de processus PHP utilisé pour exécuter du code PHP derrière un serveur web (Nginx, Apache). Il remplace l'ancien module mod_php en exécutant PHP dans des processus séparés, gérés par un pool, communiquant via FastCGI (socket Unix ou TCP). C'est le standard actuel pour servir des applications PHP (WordPress, Symfony, Laravel...).
Installation
# Debian/Ubuntu
sudo apt install php-fpm
# RHEL/Fedora
sudo dnf install php-fpm
sudo systemctl enable --now php8.3-fpm # le nom exact du service inclut la version PHP
Fichiers de configuration
| Fichier | Rôle |
|---|---|
/etc/php/8.3/fpm/php-fpm.conf | Configuration globale du processus maître |
/etc/php/8.3/fpm/pool.d/www.conf | Configuration d'un pool (utilisateur, socket, limites de processus) |
/etc/php/8.3/fpm/php.ini | Configuration PHP elle-même (limites mémoire, extensions...) |
Commandes utiles
| Commande | Fonction |
|---|---|
systemctl status/restart php8.3-fpm | Gestion du service |
php-fpm8.3 -t | Tester la configuration avant de recharger |
journalctl -u php8.3-fpm | Logs du service |
Exemple de configuration
Extrait d'un pool (/etc/php/8.3/fpm/pool.d/www.conf) :
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Un socket Unix (listen = /run/php/...sock) est préférable à un port TCP local : plus rapide, et non exposé au réseau.
Sécurisation
- Exécuter le pool sous un utilisateur dédié non privilégié (
www-data), jamaisroot. - Désactiver les fonctions PHP dangereuses via
disable_functionsdansphp.ini(exec,shell_exec,system...) si l'application ne les utilise pas. - Limiter
pm.max_childrenen cohérence avec la RAM disponible pour éviter l'épuisement mémoire (chaque processus PHP consomme sa propre mémoire). - Restreindre les permissions du socket (
listen.owner/listen.group/listen.mode) pour que seul le serveur web puisse s'y connecter. - Activer
open_basedirdansphp.inipour confiner l'accès filesystem de PHP au répertoire de l'application.
Logs & dépannage
- Logs du pool :
/var/log/php8.3-fpm.log. - Slow log (requêtes lentes) : configurable via
slowlogetrequest_slowlog_timeoutdans le pool. journalctl -u php8.3-fpm -fpour suivre en direct.- Erreur 502 côté Nginx = souvent php-fpm arrêté ou socket mal référencé dans la config Nginx.