Installer Nginx, PHP et MariaDB sur Ubuntu : préparer un serveur web fiable

Installer Nginx, PHP et MariaDB sur Ubuntu : préparer un serveur web fiable
Pour installer Nginx, PHP et MariaDB sur Ubuntu 22.04, installez d’abord Nginx et MariaDB depuis les dépôts Ubuntu, puis PHP 8.1-FPM et ses modules. Configurez ensuite Nginx pour transmettre les scripts PHP au socket PHP-FPM, testez une page PHP, supprimez-la et vérifiez les services avant d’héberger une application.
Ce tutoriel cible précisément Ubuntu 22.04 LTS amd64 avec PHP 8.1-FPM. Les commandes sont organisées dans l’ordre où chaque composant produit une ressource nécessaire au suivant : serveur HTTP, base de données, moteur PHP, configuration FastCGI, puis tests fonctionnels.
Sommaire
En bref
🧩 Une pile LEMP associe Nginx, PHP-FPM et MariaDB pour servir des applications PHP dynamiques. Nginx reçoit la requête HTTP, PHP-FPM exécute le script et MariaDB conserve les données.
🔒 Le point sensible est la liaison entre Nginx et PHP-FPM. Le chemin du socket doit être identique dans la configuration Nginx et dans le service PHP-FPM.
🧪 Le fichier test.php sert uniquement à vérifier l’exécution de PHP. Supprimez ce fichier après le test, car phpinfo() expose des informations techniques sur le serveur.
Pourquoi associer Nginx, PHP-FPM et MariaDB ?
Une pile LEMP est un environnement serveur composé de Linux, Nginx, MariaDB et PHP. Nginx est un serveur web qui distribue les fichiers statiques et transmet les requêtes PHP à PHP-FPM ; MariaDB est un système de gestion de base de données relationnelle qui remplace MySQL dans de nombreuses installations LEMP.
Le mécanisme mérite d’être distingué : Nginx ne traite pas lui-même le code PHP. PHP-FPM, gestionnaire de processus PHP, reçoit le script demandé par l’intermédiaire de FastCGI, l’exécute, puis renvoie une réponse à Nginx.
| Composant | Rôle sur le serveur Ubuntu | Vérification principale |
|---|---|---|
| Nginx | Écoute les requêtes HTTP et sert les fichiers web | sudo systemctl status nginx |
| PHP 8.1-FPM | Exécute les scripts PHP via un socket Unix | sudo systemctl status php8.1-fpm |
| MariaDB | Stocke les comptes, contenus et données applicatives | sudo systemctl status mariadb |
Un serveur web fonctionnel ne suffit pas : Nginx, PHP-FPM et MariaDB doivent être installés, démarrés et configurés pour communiquer selon des droits limités.
Prérequis avant d’installer le serveur web Ubuntu
Ce guide suppose un utilisateur non-root disposant de droits sudo, une connexion SSH opérationnelle et une machine Ubuntu 22.04 LTS. Vérifiez d’abord que votre session peut obtenir les privilèges administrateur avec la commande suivante.
sudo -v
La pile Nginx PHP MariaDB peut fonctionner sur une machine modeste pour des essais, mais la mémoire disponible devient une variable importante dès que plusieurs processus PHP ou requêtes base de données coexistent. La commande suivante affiche la mémoire disponible en mégaoctets avant toute adaptation ultérieure de PHP-FPM ou MariaDB.
free -m
- Conservez un accès SSH ouvert pendant les changements de pare-feu.
- Vérifiez l’état actuel du pare-feu avec
sudo ufw status. - Préparez un nom de domaine avant une mise en production, mais utilisez l’adresse IP du serveur pour les tests initiaux.
- Évitez d’installer des paquets depuis des scripts téléchargés et exécutés directement dans le terminal.
Comment installer Nginx, MariaDB et PHP sur Ubuntu 22.04 ?
Pour installer Nginx PHP MariaDB sur Ubuntu 22.04, mettez le système à jour, installez Nginx, sécurisez MariaDB, puis installez PHP 8.1-FPM avec le module php-mysql. Cette séquence évite de configurer Nginx vers un service PHP qui n’existe pas encore.

Les neuf étapes suivantes utilisent les paquets du dépôt Ubuntu 22.04. Ne remplacez pas PHP 8.1 par une autre version sans modifier aussi le nom du service et le chemin du socket PHP-FPM.
Étape 1 : mettre à jour Ubuntu avant l’installation
Mettez à jour l’index des paquets et les logiciels déjà installés. Cette opération peut demander un redémarrage ultérieur si le noyau ou des composants système importants sont mis à niveau.
sudo apt update && sudo apt upgrade -y
Le résultat attendu est une fin de commande sans erreur bloquante. Vérifiez ensuite que la version Ubuntu ciblée est bien celle attendue.
lsb_release -a
Étape 2 : installer et activer Nginx
Installez Nginx depuis le dépôt Ubuntu. Le service est généralement démarré par le paquet, mais l’activation explicite garantit son lancement lors du prochain démarrage du serveur.
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
Vérifiez le statut du service. La sortie doit contenir active (running) et indiquer que le service est activé.
sudo systemctl status nginx --no-pager
Si UFW est actif, ouvrez uniquement le profil Nginx prévu pour HTTP et HTTPS. Le profil Nginx Full ne remplace pas la règle SSH : gardez donc l’accès SSH autorisé avant d’appliquer cette commande.
sudo ufw allow 'Nginx Full'
sudo ufw status
Étape 3 : installer MariaDB et exécuter la sécurisation initiale
Installez le serveur MariaDB, puis lancez l’assistant de sécurisation. L’assistant permet notamment de supprimer les comptes anonymes, de retirer la base de test et de limiter les connexions administrateur distantes.
sudo apt install mariadb-server -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation
Répondez aux questions en fonction de votre politique d’administration locale. Une connexion administrateur distante ouverte n’est pas nécessaire pour une application PHP située sur la même machine.
MariaDB ne doit pas être exposé à Internet par défaut : une application web locale doit se connecter à la base via
localhostet un compte limité à sa propre base.
Sur Ubuntu, le compte administrateur MariaDB peut utiliser une authentification par socket Unix. Testez d’abord l’accès local avec cette commande, qui évite de supposer un mode d’authentification ou un mot de passe.
sudo mariadb
L’invite MariaDB [(none)]> confirme que le serveur répond. Sortez ensuite avec exit;.
Étape 4 : installer PHP 8.1-FPM et les extensions utiles
Installez PHP 8.1-FPM, le connecteur MariaDB/MySQL et les modules courants pour des applications PHP. PHP-FPM est le composant qui permet à Nginx de déléguer l’exécution des fichiers .php.
sudo apt install php8.1-fpm php-mysql php-gd php-cli php-curl php-mbstring php-zip php-opcache -y
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
Contrôlez à la fois la version PHP et l’état du service. La sortie de la première commande doit commencer par PHP 8.1, tandis que la seconde doit afficher un service actif.
php -v
sudo systemctl status php8.1-fpm --no-pager
Comment configurer Nginx pour exécuter les fichiers PHP ?
Nginx exécute PHP en transmettant les requêtes .php à PHP-FPM par le socket /run/php/php8.1-fpm.sock. La configuration doit inclure le fichier FastCGI d’Ubuntu et refuser les scripts PHP inexistants, afin d’éviter des erreurs de routage ou l’exposition de fichiers inattendus.
Le fichier ci-dessous remplace le site Nginx par défaut pour un serveur de test basé sur /var/www/html. Sauvegardez d’abord la configuration existante : cette précaution permet de revenir en arrière sans deviner ce qui a été modifié.

Étape 5 : sauvegarder et écrire la configuration du site Nginx
Créez une copie du fichier par défaut, puis écrivez une configuration complète. Le bloc location ~ \.php$ est la partie déterminante : il transmet les fichiers PHP existants à PHP-FPM.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
sudo tee /etc/nginx/sites-available/default > /dev/null <<'EOF'
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
EOF
Testez la syntaxe avant tout rechargement. La commande nginx -t doit réussir avant que Nginx ne relise sa configuration.
sudo nginx -t
sudo systemctl reload nginx
Le résultat attendu contient syntax is ok puis test is successful. Si le test échoue, restaurez le fichier sauvegardé avant d’effectuer une autre modification.
sudo cp /etc/nginx/sites-available/default.bak /etc/nginx/sites-available/default
sudo nginx -t
sudo systemctl reload nginx
Étape 6 : désactiver le comportement PHP ambigu dans php.ini
Le paramètre cgi.fix_pathinfo=0 réduit un comportement ambigu dans l’interprétation des chemins PHP. Ouvrez le fichier de configuration PHP-FPM et vérifiez que cette directive est présente avec la valeur zéro.
sudo nano /etc/php/8.1/fpm/php.ini
Recherchez cgi.fix_pathinfo, puis définissez la ligne suivante si elle n’est pas déjà active. Enregistrez le fichier et redémarrez PHP-FPM.
cgi.fix_pathinfo=0
sudo systemctl restart php8.1-fpm
sudo systemctl status php8.1-fpm --no-pager
Vérifier PHP avec Nginx avant de déployer une application
La vérification la plus directe consiste à créer temporairement un script phpinfo() dans la racine web, puis à l’ouvrir depuis l’adresse IP du serveur. Une page PHP générée par le serveur confirme simultanément le routage Nginx, le socket PHP-FPM et l’interpréteur PHP.
Le fichier de test ne doit pas rester accessible après le contrôle. La page phpinfo() renseigne notamment sur les modules chargés, les chemins de configuration et l’environnement d’exécution.
Étape 7 : créer, consulter puis supprimer le fichier de test
Créez le fichier dans la racine web. La commande tee écrit le contenu avec les droits administrateur sans rendre le répertoire publiquement inscriptible.
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/test.php
Ouvrez ensuite http://ADRESSE_IP_DU_SERVEUR/test.php dans un navigateur. La page doit afficher les informations PHP, dont une section indiquant la version 8.1 et les paramètres FPM.
Supprimez immédiatement le fichier après le test. Cette suppression ne touche que le fichier de diagnostic créé à l’étape précédente.
sudo rm /var/www/html/test.php
test ! -e /var/www/html/test.php && echo "Fichier de test supprimé"
Créer une base MariaDB pour une application PHP
Une application PHP doit utiliser une base dédiée et un compte MariaDB limité à cette base. Créez au minimum la base maintenant ; la création du compte applicatif exige ensuite un secret propre à votre application, qui ne doit ni apparaître dans l’historique du terminal ni être copié dans un article.
La commande suivante ouvre la console locale MariaDB avec les droits administrateur système. Le nom webapp_db est un exemple de base : adaptez-le à l’application réellement déployée.
Étape 8 : créer la base et préparer un compte à privilèges limités
sudo mariadb
Dans la console MariaDB, créez la base avec un jeu de caractères adapté aux contenus Unicode. La commande suivante est complète et ne contient aucun secret.
CREATE DATABASE webapp_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
SHOW DATABASES LIKE 'webapp_db';
EXIT;
La sortie de SHOW DATABASES doit contenir webapp_db. La création d’un utilisateur applicatif avec mot de passe est volontairement laissée à compléter dans votre gestionnaire de secrets ou votre procédure de déploiement : un mot de passe d’exemple intégré à une commande serait réutilisable et donc faible par construction.
⚠️ À VALIDER avant la mise en production : créez un compte MariaDB distinct, autorisé uniquement depuis localhost, puis accordez-lui les droits sur webapp_db.* et aucun droit global. Vérifiez la syntaxe correspondant à la version MariaDB installée dans la documentation officielle MariaDB avant d’exécuter la commande contenant votre secret.
Erreurs fréquentes lors de l’installation Nginx PHP MariaDB
Les erreurs de cette pile viennent rarement d’un seul paquet absent. Elles proviennent plus souvent d’une incohérence entre le service démarré, le socket configuré, les permissions des fichiers ou le mode d’authentification MariaDB.
- Erreur 502 Bad Gateway : PHP-FPM est arrêté ou Nginx vise un socket inexistant. Vérifiez
sudo systemctl status php8.1-fpm, puis comparez le socket réel avecls -l /run/php/. - Code PHP affiché comme du texte : le bloc
location ~ \.php$manque ou contient une erreur. Testez la configuration avecsudo nginx -tavant de recharger Nginx. - Erreur 404 sur un script PHP existant : la racine
rootou le chemin du fichier ne correspondent pas. Vérifiez le fichier avecls -l /var/www/html/. - Accès root MariaDB refusé : l’authentification par socket Unix peut être active. Essayez
sudo mariadbplutôt qu’une connexion root avec mot de passe. - Page inaccessible depuis Internet : Nginx fonctionne localement mais UFW ou le fournisseur d’hébergement bloque le port 80. Vérifiez d’abord
sudo ufw status.
Nginx, Apache ou Caddy : quelle alternative pour un serveur PHP ?
Nginx est adapté lorsque la configuration FastCGI et la séparation entre serveur web et interpréteur PHP sont acceptées. Apache HTTP Server propose un modèle différent, souvent choisi pour sa compatibilité historique avec certains hébergements ; Caddy privilégie une configuration concise et l’automatisation TLS dans certains contextes.
Le choix ne change pas le besoin central : une application PHP doit exécuter son code dans un environnement maîtrisé et se connecter à MariaDB avec des droits restreints. Pour reproduire exactement les commandes de ce tutoriel, conservez Nginx et PHP 8.1-FPM plutôt que de mélanger des fichiers de configuration Apache ou Caddy.
| Serveur web | Cas d’usage cohérent | Point de vigilance |
|---|---|---|
| Nginx | Serveur PHP avec PHP-FPM et configuration FastCGI explicite | Le socket PHP-FPM doit correspondre exactement |
| Apache HTTP Server | Environnements utilisant déjà une configuration Apache | Les directives et modules ne sont pas interchangeables avec Nginx |
| Caddy | Déploiements recherchant une syntaxe de configuration plus courte | La configuration PHP-FPM reste nécessaire pour les scripts PHP |
Sécuriser le serveur après l’installation
Une installation qui répond à une page PHP n’est pas encore une configuration de production. Limitez les services exposés, protégez les secrets applicatifs et prévoyez des mises à jour ainsi que des sauvegardes testées avant de placer des données réelles sur le serveur.
Les droits du répertoire web doivent permettre à Nginx de lire les fichiers sans donner un accès d’écriture généralisé. Vérifiez le propriétaire et les permissions, puis corrigez-les seulement si votre mode de déploiement le justifie.
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
ls -ld /var/www/html
La dernière commande doit afficher www-data comme propriétaire du répertoire. Une application qui doit écrire des fichiers téléversés ou du cache nécessite un répertoire précis, séparé et doté de permissions minimales ; n’utilisez pas chmod 777.
- Autorisez uniquement SSH, HTTP et HTTPS dans le pare-feu lorsque ces services sont nécessaires.
- Conservez les mots de passe, clés API et paramètres MariaDB hors du dépôt de code public.
- Supprimez les fichiers de diagnostic PHP dès que les vérifications sont terminées.
- Testez une sauvegarde MariaDB et une restauration sur un environnement séparé avant de compter sur cette sauvegarde.
- Appliquez les mises à jour Ubuntu après avoir vérifié leur compatibilité avec votre application.
Le serveur peut ensuite héberger une application PHP ou un CMS, à condition de suivre la documentation propre à cette application. La publication de contenu doit aussi respecter le droit applicable et les conditions des services utilisés ; cet article sur les risques des plateformes de streaming illégales rappelle pourquoi un serveur ne rend pas un usage ou un contenu automatiquement licite.
Sources utiles à consulter
La documentation doit primer sur les tutoriels lorsque vous adaptez une version de PHP, un nom de service ou une configuration réseau. Les interfaces et paquets évoluent, tandis que ce guide vise la combinaison Ubuntu 22.04 et PHP 8.1.
- Documentation Nginx : directives de serveur, traitement FastCGI et validation de la configuration.
- Documentation MariaDB sur mysql_secure_installation : sécurisation initiale et comportement des options interactives.
- Manuel PHP-FPM : fonctionnement de PHP-FPM et paramètres d’exécution PHP.
- Documentation Ubuntu Server : administration des services, paquets et sécurité du système.
À retenir
- 🧩 Nginx sert les requêtes, mais PHP-FPM exécute les scripts PHP.
- 🔗 Le socket
/run/php/php8.1-fpm.sockdoit correspondre dans Nginx et PHP-FPM. - 🔒 MariaDB doit rester accessible localement pour une application installée sur le même serveur.
- 🧪 La page
phpinfo()valide le montage, puis doit être supprimée immédiatement. - ⚠️ Testez la procédure sur une machine vierge avant toute mise en production.
Questions fréquentes sur Nginx, PHP et MariaDB
Peut-on installer Nginx, PHP et MariaDB sur la même machine ?
Oui, une seule machine Ubuntu peut héberger les trois composants pour un site ou une application de taille limitée. Nginx, PHP-FPM et MariaDB restent toutefois des services distincts, avec leurs propres journaux, droits et besoins mémoire.
Pourquoi Nginx affiche-t-il une erreur 502 Bad Gateway avec PHP ?
Une erreur 502 indique souvent que PHP-FPM est arrêté ou que le socket défini dans Nginx ne correspond pas au socket disponible. Vérifiez le statut de php8.1-fpm, puis listez les fichiers présents dans /run/php/.
Quelle version de PHP utilise ce tutoriel Ubuntu ?
Ce tutoriel cible PHP 8.1-FPM sur Ubuntu 22.04 LTS, avec le service php8.1-fpm et le socket /run/php/php8.1-fpm.sock. Une autre version de PHP impose de modifier ces deux références de manière cohérente.
Faut-il laisser le fichier test.php sur le serveur ?
Non, le fichier utilisant phpinfo() doit être supprimé dès que le test est concluant. La page peut révéler des modules, chemins et paramètres utiles à une personne cherchant à analyser le serveur.
MariaDB doit-il être ouvert sur Internet pour un site PHP ?
Non, une application PHP et MariaDB installées sur le même serveur communiquent normalement via localhost. Ouvrir MariaDB à Internet augmente la surface d’exposition et exige une configuration réseau, des comptes et des règles de filtrage supplémentaires.
Avertissement : cette procédure cible Ubuntu 22.04 LTS amd64, Nginx issu du dépôt Ubuntu, PHP 8.1-FPM et MariaDB issu du dépôt Ubuntu. Rejouez toutes les étapes sur une machine vierge ou un environnement de test avant toute mise en production, puis adaptez les sauvegardes, secrets, nom de domaine et règles réseau à votre contexte réel.