Installation PHP-FPM et l’utiliser avec Apache2 et Nginx

Après avoir vu comment installer et « configurer » le mod PHP pour Apache2, nous allons voir comment installer et configurer Apache2 et Nginx pour utiliser PHP-FPM.

PHP-FPM est indépendant du serveur, il exécute son propre service sur le serveur, l’utilisation de PHP-FPM implique de configurer le virtualhost pour lui indiquer d’exécuter les fichiers PHP par le service PHP.

Les deux principaux avantages d’utiliser PHP-FPM sont :

  • Sur des charges élevées, PHP-FPM a de meilleurs performances.
  • Il est possible d’avoir sur un même serveur plusieurs versions de PHP (7.3, 7.4 et 8) et configurer les virtualhosts pour utiliser une version précise de PHP.

Dans cette leçon, nous allons voir d’abord l’installation, qui est identique pour Apache2 et Nginx puis nous verrons comment configurer chaque serveur Web pour utiliser PHP.

Installation de PHP-FPM

Depuis un terminal entrer la commande ci-après :

sudo apt install php-fpm

Confirmer l’installation soit en entrant Y + Entrée ou appuyer directement sur Entrée

Patienter pendant l’installation de PHP-FPM sur le serveur.

À la fin de l’installation pour tester que PHP est bien installé, entrer la commande ci-après pour afficher la version de PHP.

php -v

Je vous ai dit également que PHP-FPM utilisé un service, entrer la commande ci-dessous pour vérifier son fonctionnement.

sudo systemctl status php7.4-fpm

PHP-FPM est maintenant installé, nous allons passer à sa configuration.

Configurer PHP-FPM avec le service Web

Je vais traiter les serveirs Web séparement, car la configuration est différente en fonction d’Apache2 et Nginx.

Apache2 : utiliser PHP-FPM

Si vous êtes toujours dans la session du terminal, on peut voir à la fin de l’installation ce qu’il est nécessaire de faire pour « utiliser » PHP-FPM sur Apache2.

Il est nécessaire de faire deux opérations pour que l’on puisse utiliser des fichiers php sur notre site :

  • Activer le mod proxy_fcgi et setenvif
  • Activer la configuration php7.4-fpm

On va commencer par activer le mod proxy_fcgi

sudo a2enmod proxy_fcgi setenvif

Avant de redémarrer le service Apache2 comme demander, on va également activer la configuration php-fpm :

sudo a2enconf php7.4-fpm

Redémarrer le service Apache2 pour la prise en compte des modifications :

sudo systemctl restart apache2

SI vous êtes curieux, vous pouvez ouvrir le fichier php7.4-fpm.conf, ce fichier de configuration, indique à Apache2, d’utiliser le service PHP-FPM pour interpréter les fichiers de configurations.

Pour tester le bon fonctionnement, dans le virtualhost, créer un fichier avec l’extension .php et entrer le code ci-dessous dedans.

Depuis un navigateur Internet appeler cette page pour afficher la configuration de php.

On peut voir que Server API retourne bien FPM/FastCGI et que le fichier de configuration utiliser par PHP est bien le fichier php.ini qui se trouve dans le dossier fpm.

PHP est opérationnel sur Apache2.

Nginx : utiliser PHP-FPM

Pour utiliser PHP avec Nginx, il est nécessaire d’utiliser PHP-FPM, maintenant que celui-ci est installé sur le serveur, il est nécessaire d’aller modifier de notre virtualhost pour lui indiquer que les fichiers ayant l’extension .php doivent être traités par le service PHP.

Ouvrir le fichier de votre virtualhost :

sudo nano /etc/nginx/sites-available/fichier_du_virtualhost

Avant la dernière accolade ( } ), ajouter le bloc ci-dessous afin de faire la liaison avec le PHP-FPM.

Sauvegarder le fichier et recharger la configuration nginx.

sudo systemctl reload nginx

Pour tester le bon fonctionnement, dans le virtualhost, créer un fichier avec l’extension .php et entrer le code ci-dessous dedans.

Depuis un navigateur Internet appeler cette page pour afficher la configuration de php.

Comme pour Apache2, on peut voir que Server API a la valeur FPM/FastCGI.

Vous pouvez maintenant utiliser des scripts PHP sur votre serveur avec Nginx

Configuration de PHP

Comme pour l’utilisation du mod PHP sur Apache2, je vais vous expliquer où trouver le fichier de configuration (si vous avez regardé la capture ci-dessus) vous le savez 😉 .

Le fichier php.ini utilisé par PHP-FPM se trouve à l’emplacement suivant :

/etc/php/X.Y/fpm/php.ini

X.Y représente la version de PHP.

Changer une directive dans le fichier php.ini

Si vous avez suivi la chapitre, précédent, c’est la même chose

Pour rappel, les modifications effectuées dans le fichier php.ini affecterons l’ensemble des sites qui vont utiliser cette version de PHP-FPM

Pour illustrer ce chapitre, nous allons modifier une autre directive, nous allons modifier la quantité de mémoire alloué à un script. Comme on peut le voir sur la capture en dessous, cette limite à 128M.

Ouvrir le fichier php.ini à l’aide de nano

sudo nano /etc/php/7.4/fpm/php.ini

Rechercher la directive memory_limit et changer la valeur par 256M.

Sauvegarder et fermer le fichier php.ini

Maintenant pour la prise en compte de la nouvelle directive, il faut redémarrer le service PHP-FPM. Entrer la commande ci-dessous :

sudo systemctl restart php7.4-fpm.service

Actualiser la page qui affiche les informations PHP et vérifier que la valeur memory_limit est maintenant à 256M.

Maintenant que l’on a vu comment configurer les directives PHP-FPM pour l’ensemble des sites, nous allons voir comment le gérer localement.

Apache2 : configurer une directive localement avec le fichier .htaccess

Cette partie ayant été traitée dans le chapitre précédent et fonctionnant de la même façon, je vous laisse revoir ce point si nécessaire : Installer le mod PHP pour Apache2

Nginx : directive locale dans la configuration du virtualhost

Pour Nginx, une des solutions est de configurer la directive locale dans la configuration du virtualhost.

Dans le bloc de configuration où l’indique la liaison avec PHP, il est possible d’ajouter des directives locales en utilisant : fastcgi_param PHP_VALUE "";

En exemple, nous allons modifier la valeur memoly_limit à 128M en ajoutant le bloc ci-dessous :

Ce qui donne dans le fichier de fichier de configuration :

Voici une capture du fichier de configuration :

Vérifier la configuration de Nginx :

sudo nginx -t

Recharger la configuration Nginx et redémarrer le service PHP :

sudo systemctl reload nginx
sudo systemctl restart php7.4-fpm

Actualiser la page qui contient la fonction phpinfo(); pour vérifier la prise en compte.

Sur la capture ci-dessous, on peut voir que la valeur a bien été modifiée, mais on constate aussi qu’elle est considérée comme valeur maitre et non locale.

.user.ini : directive locale PHP

La dernière solution pour configurer des directives locales avec PHP est d’utilisée le fichier .user.ini . Cette solution fonctionne aussi bien avec Apache2 que Nginx, il faut juste s’assurer que PHP est configurer pour lire le fichier .user.ini.

Depuis les informations PHP, il faut regarder si la directive user_ini.filename est configurée.

Pour vous montrer l’utilisation du fichier .user.ini, je vais modifier la taille des fichiers pouvant être envoyés en changeant la directive upload_max_filesize à 4M, par défaut, elle est à 2M.

Aller dans le dossier racine du site, une fois dedans ouvrir l’éditeur nano.

sudo nano

Ajouter la directive upload_max_filesize = 4M puis sauvegarder le fichier en le nommant .user.ini.

Pour vérifier que le fichier a bien été créé, entrer la commande ll.

Actualiser la page d’informations PHP, normalement la valeur locale upload_max_filesize est maintenant à 4M.

Normalement la prise en compte est directe, si ce n’est pas le cas, redémarrer le service PHP.


Vous savez maintenant comment installer et configurer Apache2 et Nginx pour utiliser le service PHP-FPM

Dans le prochain chapitre je vais vous expliquer comment installer des extensions PHP.