À Nous la ScienceCulture & éducation scientifique Nous écrire

Univers & matière

Espace & astronomiePhysique & quantiqueTerre & géosciencesMathématiques

Le vivant

Biologie & génétiqueSanté & médecineCerveau & psychologie

Planète & tech

Climat & environnementÉnergieIA & numériqueTechnologies & innovation

Sciences & société

Histoire des sciencesSciences & sociétéÀ proposContact Nous écrire
Technologies & innovation

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

1 juillet 202617 min de lecture

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.

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.

Checklist de validation LEMP

Confirmez que Nginx, PHP-FPM et MariaDB fonctionnent ensemble avant d’héberger votre application.

Éléments de la liste :

  • Ubuntu est à jour — Les dépôts et paquets ont été mis à jour avant l’installation.
  • Nginx est actif — Le service répond et son démarrage automatique est activé.
  • PHP 8.1-FPM est actif — Le gestionnaire PHP-FPM est démarré et sa version est vérifiée.
  • Le socket PHP-FPM correspond — Le chemin configuré dans Nginx est identique à celui utilisé par PHP-FPM.
  • La configuration Nginx est valide — La syntaxe est contrôlée avant de recharger le service.
  • MariaDB est sécurisé — Les comptes anonymes, la base de test et les accès inutiles sont supprimés.
  • La page PHP de test est supprimée — Le fichier test.php et les informations phpinfo() ne restent pas accessibles publiquement.
  • Les accès sont limités — MariaDB n’est pas exposé inutilement et les secrets ne sont pas placés dans un fichier public.

Cette checklist ne remplace pas un audit de sécurité. Vérifiez les journaux, les droits et la configuration réseau avant la mise en production.


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.

Schéma de configuration FastCGI entre Nginx, PHP-FPM et MariaDB sur Ubuntu 22.04.
Nginx transmet les scripts PHP au socket /run/php/php8.1-fpm.sock avant l’accès à MariaDB locale.

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 localhost et 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é.

Schéma de configuration Nginx PHP-FPM MariaDB sur Ubuntu
Nginx transmet les scripts PHP au socket PHP 8.1-FPM, puis l’application PHP interroge MariaDB localement.

É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 avec ls -l /run/php/.
  • Code PHP affiché comme du texte : le bloc location ~ \.php$ manque ou contient une erreur. Testez la configuration avec sudo nginx -t avant de recharger Nginx.
  • Erreur 404 sur un script PHP existant : la racine root ou le chemin du fichier ne correspondent pas. Vérifiez le fichier avec ls -l /var/www/html/.
  • Accès root MariaDB refusé : l’authentification par socket Unix peut être active. Essayez sudo mariadb plutô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.

  1. Autorisez uniquement SSH, HTTP et HTTPS dans le pare-feu lorsque ces services sont nécessaires.
  2. Conservez les mots de passe, clés API et paramètres MariaDB hors du dépôt de code public.
  3. Supprimez les fichiers de diagnostic PHP dès que les vérifications sont terminées.
  4. Testez une sauvegarde MariaDB et une restauration sur un environnement séparé avant de compter sur cette sauvegarde.
  5. 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.

À retenir

  • 🧩 Nginx sert les requêtes, mais PHP-FPM exécute les scripts PHP.
  • 🔗 Le socket /run/php/php8.1-fpm.sock doit 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.

Version PDF à téléchargerEmportez l'essentiel de cet article au format PDF.

Télécharger le PDF

Laisser un commentaire