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 12. 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. A 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.2 sur Debian 12
Pour la suite de ce tutoriel, une machine sous Debian 12 sur laquelle le paquet Apache2 a été installé sera utilisée. Tout d'abord, nous devons installer le paquet PHP8.2-FPM, afin d'utiliser PHP 8.2. Ce qui donne :
sudo apt-get update
sudo apt-get install php8.2-fpm
Ensuite, nous devons activer deux modules dans Apache2 ainsi qu'un fichier de configuration :
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpm
sudo systemctl reload apache2
Voilà, PHP-FPM pour PHP 8.2 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.2-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.2-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.2-fpm" qui est spécifié.
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.2/apache2/php.ini" pour configurer PHP. Oubliez ce fichier ! Désormais, vous devez éditer le fichier suivant :
sudo nano /etc/php/8.2/fpm/php.ini
A l'intérieur, vous retrouvez toutes les directives pour configurer PHP : memory_limit, upload_max_filesize, max_file_uploads, session.cookie_httponly, etc...
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 "php-fpm8.2".
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 ?