Installer un serveur LEMP (Nginx, MariaDB, PHP-FPM) sur Rocky Linux
LEMP, c'est LAMP avec Nginx à la place d'Apache, et PHP qui tourne à part dans PHP-FPM. La méthode actuelle sur Rocky Linux 10, à la place des vieux guides CentOS 7.
Un serveur LEMP associe Linux, Nginx, MariaDB et PHP. La différence avec LAMP tient à la façon d'exécuter PHP : Nginx n'a pas de module PHP intégré, il transmet les requêtes .php à PHP-FPM (FastCGI Process Manager), un service séparé qui gère un groupe de processus PHP. La documentation Rocky Linux note d'ailleurs que PHP-FPM est surtout utilisé avec Nginx.
Testez sur une VM de lab, et prenez un instantané avant toute installation sur un serveur de production.
Les versions de l'ancien guide sont toutes en fin de vie
L'ancienne adresse de cette page citait CentOS 7, MariaDB 10.4 et PHP 7.3. Aucune n'est encore maintenue :
| Composant de l'ancien guide | Statut au 12 octobre 2026 |
|---|---|
| CentOS Linux 7 | fin de vie le 30 juin 2024 (projet CentOS) |
| PHP 7.3 | fin de vie le 6 décembre 2021 ; toute la branche 7.x est arrêtée (php.net) |
| MariaDB 10.4 | absente des séries « Current Releases » listées par MariaDB |
La suite utilise Rocky Linux 10, supportée jusqu'au 31 mai 2030 (sécurité jusqu'au 31 mai 2035), et les versions de Nginx, MariaDB et PHP de son dépôt AppStream. Pour la même pile avec Apache, voyez le guide du serveur LAMP.
Le serveur du lab
| Hôte | Rôle | Interface | Adresse |
|---|---|---|---|
| srv-web02 | Rocky Linux 10, serveur LEMP | ens18 | 192.168.10.21 |
Prérequis : Rocky Linux à jour, un compte sudo, une adresse fixe, firewalld actif.
Étape 1 : Nginx
sudo dnf install nginx
sudo systemctl enable nginx --now
sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload
La configuration principale est /etc/nginx/nginx.conf ; elle inclut les fichiers de /etc/nginx/conf.d/*.conf, où l'on place un fichier par site.
Étape 2 : MariaDB
L'installation est la même que pour LAMP :
sudo dnf install mariadb-server
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation
Le script de sécurisation propose de protéger le compte root, de supprimer les comptes anonymes et la base test, et d'interdire la connexion distante de root. Si l'application tourne sur le même serveur, n'ouvrez pas le port de la base dans le pare-feu.
Étape 3 : PHP-FPM
dnf whatprovides php
sudo dnf install php-fpm php-mysqlnd
sudo systemctl enable --now php-fpm
Selon la documentation Rocky Linux, PHP-FPM déclare par défaut un pool nommé www dans /etc/php-fpm.d/www.conf. Les lignes qui comptent pour Nginx :
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.acl_users = apache,nginx
Le pool écoute sur un socket Unix, et listen.acl_users donne déjà à l'utilisateur nginx le droit d'y accéder. La documentation explique pourquoi préférer le socket quand Nginx et PHP sont sur la même machine : il évite la couche TCP/IP. Le serveur web et PHP doivent tous deux avoir les droits sur ce socket.
Étape 4 : relier Nginx à PHP-FPM
La documentation Rocky indique que la configuration par défaut de Nginx contient déjà de quoi faire fonctionner PHP avec PHP-FPM. Pour un site dédié, créez un fichier /etc/nginx/conf.d/srv-web02.conf avec un bloc server explicite :
server {
listen 80;
server_name srv-web02.lab.local;
root /var/www/html;
index index.php index.html;
location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
}
fastcgi.conf contient notamment SCRIPT_FILENAME, le paramètre qui indique à PHP-FPM quel fichier exécuter. fastcgi_pass pointe vers le socket du pool www. Si vous préférez une écoute TCP, la documentation montre la variante fastcgi_pass 127.0.0.1:9000;, à condition de changer listen dans le pool.
Valider et recharger
nginx -t teste la syntaxe de la configuration et tente d'ouvrir les fichiers qu'elle référence, selon la documentation de Nginx :
sudo nginx -t
sudo systemctl reload nginx
Le point de contrôle est simple :
nginx -tne signale aucune erreur ;systemctl status php-fpmmontre le service actif ;- le socket
/run/php-fpm/www.sockexiste.
Vérifier que PHP répond
Créez un fichier de test /var/www/html/info.php qui appelle phpinfo(), ouvrez http://192.168.10.21/info.php, puis supprimez le fichier : la documentation Rocky Linux rappelle qu'il expose la configuration du serveur.
<?php
phpinfo();
?>
sudo rm /var/www/html/info.php
Si la page renvoie une erreur 502, Nginx n'arrive pas à joindre PHP-FPM : vérifiez que le service tourne et que le chemin du socket est identique dans www.conf et dans fastcgi_pass. Les journaux de PHP-FPM sont dans /var/log/php-fpm/.
Et ensuite
Pour une version de PHP plus récente que celle d'AppStream, la page sur les dépôts EPEL et Remi explique les dépôts complémentaires. Une base Oracle se gère à part, avec son propre guide d'installation d'Oracle 19c. Les autres tutoriels sont dans la rubrique Serveurs Linux, et le reste du site sur l'accueil de Pixelabs.
Questions fréquentes
Quelle différence entre LAMP et LEMP ?
LAMP utilise Apache, LEMP utilise Nginx. Avec Nginx, PHP ne tourne pas dans le serveur web : il s'exécute dans le service PHP-FPM, auquel Nginx transmet les requêtes PHP par FastCGI.
Faut-il un socket Unix ou le port 9000 pour PHP-FPM ?
Sur une seule machine, le socket Unix est la configuration par défaut de Rocky Linux et évite la couche TCP/IP. L'écoute TCP sert quand PHP-FPM tourne sur un autre serveur que Nginx.
Pourquoi une erreur 502 Bad Gateway ?
Nginx n'obtient pas de réponse de PHP-FPM. Le service est arrêté, le socket n'existe pas, ou le chemin indiqué dans fastcgi_pass ne correspond pas à la directive listen du pool.
Peut-on garder PHP 7.3 ?
Non pour un serveur exposé. Le projet PHP indique que la branche 7.3 est en fin de vie depuis le 6 décembre 2021 et que toutes les versions 7.x sont arrêtées. Migrez l'application vers une branche 8.x supportée.
Quel utilisateur exécute PHP-FPM ?
Dans le pool www fourni par Rocky Linux, les processus tournent sous l'utilisateur et le groupe apache, et l'utilisateur nginx est autorisé sur le socket.