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 guideStatut au 12 octobre 2026
CentOS Linux 7fin de vie le 30 juin 2024 (projet CentOS)
PHP 7.3fin de vie le 6 décembre 2021 ; toute la branche 7.x est arrêtée (php.net)
MariaDB 10.4absente 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ôteRôleInterfaceAdresse
srv-web02Rocky Linux 10, serveur LEMPens18192.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 :

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.