Comment configurer Apache2 avec PHP-FPM 8.2 pour exécuter les scripts PHP ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à installer PHP-FPM 8.2 sur un serveur Web Apache2 sous Debian 13. Avant cela, nous verrons pourquoi il faut préférer PHP-FPM plutôt que le module PHP pour Apache.
PHP-FPM pour PHP FastCGI Process Manager fonctionne différemment du module PHP pour Apache2. En fait, PHP-FPM va créer des processus distincts de deux du serveur Web, c'est-à-dire que la liste des processus contiendra des processus PHP-FPM et des processus Apache2. À l'inverse, lorsque PHP est exécuté en tant que module Apache, chaque processus Apache exécute son propre moteur de scripts PHP.
Pour optimiser les ressources, il est recommandé d'utiliser PHP-FPM plutôt que le module pour Apache connu sous le nom de libapache2-mod-php. Avec PHP-FPM, vous pourrez gérer plus de connexions simultanées tout en utilisant moins de ressources. Intéressant, non ?
Remarque : sur un serveur existant, vous pouvez tout à fait passer de mod_php à PHP-FPM. Nous pouvons même dire que c'est recommandé !
II. Installation de PHP-FPM 8.4 sur Debian 13
Pour la suite de ce tutoriel, une machine sous Debian 13 sur laquelle le paquet Apache2 a été installé sera utilisée. Tout d'abord, nous devons installer le paquet PHP8.4-FPM, afin d'utiliser PHP 8.4. Ce qui donne :
sudo apt-get update
sudo apt-get install php8.4-fpm
Ensuite, nous devons activer deux modules dans Apache2 ainsi qu'un fichier de configuration :
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.4-fpm
sudo systemctl reload apache2
Voilà, PHP-FPM pour PHP 8.4 est installé et activé sur le serveur.
III. Intégrer PHP-FPM à Apache
Pour qu'Apache sollicite PHP-FPM pour l'exécution des scripts PHP, vous devez configurer chaque VirtualHost en conséquence. En fait, vous devez indiquer dans votre VirtualHost que pour tous les fichiers ".php", il faut solliciter PHP8.4-FPM en local.
Vous devez éditer le fichier de votre VirtualHost, par exemple :
sudo nano /etc/apache2/sites-available/support.it-connect.tech.conf
Puis, ajoutez ce bloc de 3 lignes à l'intérieur des balises <VirtualHost>, comme ceci :
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
Vous pouvez intégrer ces lignes à l'identique, si ce n'est qu'il faudra adapter en fonction de la version de PHP-FPM que vous utilisez. Ici, c'est bien php8.4-fpm qui est spécifié. Voici un ancien exemple avec PHP-FPM 8.2, mais la logique reste la même.

Enregistrez et redémarrez Apache pour prendre en compte les changements :
sudo systemctl restart apache2
En principe, la commande ci-dessous doit vous retourner la valeur mpm_prefork_module (shared).
sudo apachectl -M | grep 'mpm'
IV. Comment configurer PHP-FPM ?
Ceux qui ont l'habitude d'utiliser mod_php ont également l'habitude de modifier le fichier /etc/php/8.4/apache2/php.ini pour configurer PHP. Oubliez ce fichier ! Désormais, vous devez éditer le fichier suivant qui est chargé directement par PHP-FPM :
sudo nano /etc/php/8.4/fpm/php.ini
À l'intérieur, vous retrouvez toutes les directives pour configurer PHP : memory_limit, upload_max_filesize, max_file_uploads, session.cookie_httponly, etc...
memory_limit: limite la quantité maximale de mémoire que peut utiliser un script PHP.upload_max_filesize: limite la taille maximum d’un fichier téléversé depuis un formulaire (image, archive ZIP, etc.)max_file_uploads: définit le nombre maximal de fichiers pouvant être téléversés en même temps via une requête.session.cookie_httponly: empêche l’accès au cookie de session depuis JavaScript afin de limiter les risques d’exploitation via XSS.
Il vous suffit d'effectuer votre configuration et d'enregistrer le fichier.
; Whether or not to add the httpOnly flag to the cookie, which makes it
; inaccessible to browser scripting languages such as JavaScript.
; https://php.net/session.cookie-httponly
session.cookie_httponly = on
Ensuite, pour appliquer les modifications, nous n'allons pas redémarrer Apache2 ! C'est bien le service PHP-FPM qu'il faut redémarrer :
sudo systemctl restart php8.2-fpm.service
V. Conclusion
Après avoir appliqué cette configuration, votre serveur Web Apache2 exécute les scripts PHP à l'aide de PHP-FPM ! Si vous exécutez la commande top sur votre machine, vous devriez voir des processus apache2 et des processus correspondant à votre version de PHP-FPM (php-fpm8.2, php-fpm8.4, etc.).

Si vous désirez installer un serveur Web avec la stack LAMP, suivez ce tutoriel complet :


Bonjour Florian,
Merci pour ce tuto tres clair qui explique bien FPM!
Je vais me mettre a l’utiliser!
Bonne journée
Bonjour, ça peut déjà fonctionner avec php 8.3 ?
Très simple pour un débutant. Vraiment merci