Serveur Web · 9 min read · Feb 03, 2026

Installation de Nginx avec PHP et MariaDB (comme remplacement de MySQL) - LEMP - sur Ubuntu 15.10 (Wiley Werewolf)

Nginx (prononcé “engine x”) est un serveur HTTP gratuit, open-source et haute performance. Nginx est connu pour sa stabilité, son ensemble de fonctionnalités riche, sa configuration simple et sa faible consommation de ressources. Ce tutoriel montre comment vous pouvez installer Nginx sur un serveur Ubuntu 15.10 avec le support de PHP (via PHP-FPM) et MariaDB (comme remplacement de MySQL). Le terme LEMP signifie : Linux + Nginx + MySQL + PHP.

1 Remarque Préliminaire

Dans ce tutoriel, j’utiliserai le nom d’hôte server1.example.com avec l’adresse IP 192.168.1.100. Ces paramètres peuvent différer pour vous, donc vous devez les remplacer là où cela est approprié.

2 Installation de MariaDB

J’installerai MariaDB au lieu de MySQL, MariaDB est un fork de MySQL maintenu par le fondateur original de MySQL, Monty Widenius, qui a quelques améliorations de vitesse et de fonctionnalités par rapport à MySQL. Pour installer MariaDB, exécutez :

sudo apt-get -y install mariadb-server mariadb-client

MariaDB n’a actuellement aucun mot de passe défini pour l’utilisateur root. Exécutez la commande mysql_secure_installation pour configurer un mot de passe et supprimer la base de données de test.

sudo mysql_secure_installation

Vous serez invité à répondre à ces questions :

Entrez le mot de passe actuel pour root (appuyez sur entrer pour aucun) : <-- appuyez sur entrer  
Définir le mot de passe root ? [Y/n] <-- y  
Nouveau mot de passe : <-- Entrez le nouveau mot de passe root MariaDB ici  
Ressaisissez le nouveau mot de passe : <-- Répétez le mot de passe  
Supprimer les utilisateurs anonymes ? [Y/n] <-- y  
Interdire la connexion root à distance ? [Y/n] <-- y  
Recharger les tables de privilèges maintenant ? [Y/n] <-- y

3 Installation de Nginx

Nginx est disponible en tant que package pour Ubuntu 15.10. Il se peut que le serveur web Apache soit installé sur votre serveur et cela pourrait causer un conflit. Vérifiez qu’Apache n’est pas en cours d’exécution :

ps aux | grep apache2

Si cette commande ne renvoie aucun résultat, procédez à l’installation de Nginx.

Supprimez Apache au cas où la commande ci-dessus montrerait des processus Apache avec ces commandes :

sudo systemctl stop apache2.service  
sudo systemctl disable apache2.service  
sudo apt-get remove apache2

Maintenant, nous pouvons installer nginx.

sudo apt-get install nginx

Démarrez Nginx ensuite :

sudo systemctl start nginx.service  
sudo systemctl enable nginx.service

Tapez l’adresse IP de votre serveur web ou le nom d’hôte dans un navigateur (par exemple http://192.168.1.100), et vous devriez voir la page suivante :

Page par défaut d'Ubuntu Nginx.

Pourquoi montre-t-il “Apache2” au lieu de Nginx sur cette page ? Le texte de la page ne reflète pas le serveur web en cours d’exécution, la page ci-dessus est juste la page par défaut sur Ubuntu dans le répertoire racine /var/www/html/ qui est utilisé par Apache et Nginx. Pour vérifier que Nginx sert réellement cette page, vous pouvez soit jeter un œil aux en-têtes HTTP dans la console d’analyse réseau de Firefox :

Vérifiez les en-têtes http de Nginx.

Ou vous vérifiez dans le shell que nginx est en cours d’exécution avec :

ps aux | grep nginx

Le résultat devrait montrer les processus nginx comme ceci :

Vérifiez les processus Nginx.

4 Installation de PHP5

Nous pouvons faire fonctionner PHP5 dans Nginx via PHP-FPM. PHP-FPM (FastCGI Process Manager) est une implémentation PHP FastCGI alternative avec quelques fonctionnalités supplémentaires utiles pour les sites de toute taille, en particulier les sites plus fréquentés) que nous installons comme suit :

sudo apt-get install php5-fpm

PHP-FPM est un processus démon (avec le script d’initialisation php5-fpm) qui exécute un serveur FastCGI sur le socket /var/run/php5-fpm.sock.

5 Configuration de Nginx

La configuration de Nginx se trouve dans le fichier /etc/nginx/nginx.conf que nous ouvrons maintenant dans l’éditeur nano :

sudo nano /etc/nginx/nginx.conf

La configuration est facile à comprendre (vous pouvez en apprendre plus ici : http://wiki.nginx.org/NginxFullExample et ici : http://wiki.nginx.org/NginxFullExample2)

Tout d’abord (c’est optionnel) définissez le keepalive_timeout à une valeur raisonnable :

[...]  
    keepalive_timeout   2;  
[...]  

Les hôtes virtuels sont définis dans des conteneurs server {}. L’hôte virtuel par défaut est défini dans le fichier /etc/nginx/sites-available/default - modifions-le comme suit :

sudo nano /etc/nginx/sites-available/default
##  
# Vous devriez consulter les URL suivantes afin de comprendre solidement  
# les fichiers de configuration Nginx pour libérer pleinement la puissance de Nginx.  
# http://wiki.nginx.org/Pitfalls  
# http://wiki.nginx.org/QuickStart  
# http://wiki.nginx.org/Configuration  
#  
# En général, vous voudrez déplacer ce fichier quelque part, et commencer avec un fichier propre  
# mais gardez-le à portée de main pour référence. Ou désactivez-le simplement dans sites-enabled.  
#  
# Veuillez consulter /usr/share/doc/nginx-doc/examples/ pour des exemples plus détaillés.  
##  
  
# Configuration du serveur par défaut  
#  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # Configuration SSL  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # Remarque : Vous devez désactiver gzip pour le trafic SSL.  
 # Voir : https://bugs.debian.org/773332  
 #  
 # Lisez sur ssl_ciphers pour garantir une configuration sécurisée.  
 # Voir : https://bugs.debian.org/765782  
 #  
 # Certificats auto-signés générés par le package ssl-cert  
 # Ne les utilisez pas sur un serveur de production !  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # Ajoutez index.php à la liste si vous utilisez PHP  
 index index.php index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # Première tentative de servir la demande en tant que fichier, puis  
 # en tant que répertoire, puis revenir à l'affichage d'un 404.  
 try_files $uri $uri/ =404;  
 }  
  
 # passer les scripts PHP au serveur FastCGI écoutant sur 127.0.0.1:9000  
 #  
 location ~ \.php$ {  
  include snippets/fastcgi-php.conf;  
   
  # Avec php5-cgi seul :  
  # fastcgi_pass 127.0.0.1:9000;  
  # Avec php5-fpm :  
  fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
  
 # interdire l'accès aux fichiers .htaccess, si le répertoire racine du document d'Apache  
 # coïncide avec celui de nginx  
 #  
 #location ~ /\.ht {  
 # deny all;  
 #}  
}  
  
  
# Configuration de l'hôte virtuel pour example.com  
#  
# Vous pouvez déplacer cela vers un fichier différent sous sites-available/ et créer un lien symbolique  
# vers sites-enabled/ pour l'activer.  
#  
#server {  
# listen 80;  
# listen [::]:80;  
#  
# server_name example.com;  
#  
# root /var/www/example.com;  
# index index.html;  
#  
# location / {  
# try_files $uri $uri/ =404;  
# }  
#}

servername ; fait de ceci un hôte virtuel par défaut (bien sûr, vous pouvez également spécifier un nom d’hôte ici comme www.example.com).

J’ai ajouté index.php à la ligne d’index. root /usr/share/nginx/html; signifie que le répertoire racine du document est le répertoire /usr/share/nginx/html.

La partie importante pour PHP est le bloc location ~ .php$ {}. Décommentez-le pour l’activer. Veuillez noter qu’il est important d’activer la ligne “include snippets/fastcgi-php.conf;” dans le bloc de localisation PHP pour prévenir les exploits de jour zéro (voir http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP et http://forum.nginx.org/read.php?2,88845,page=3).

Maintenant, enregistrez le fichier et rechargez nginx :

sudo service nginx reload

Ensuite, ouvrez /etc/php5/fpm/php.ini…

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

… et définissez cgi.fix_pathinfo=0 :

[...]  
; cgi.fix_pathinfo fournit un support *réel* pour PATH_INFO/PATH_TRANSLATED pour CGI. PHP's  
; le comportement précédent était de définir PATH_TRANSLATED sur SCRIPT_FILENAME, et de ne pas comprendre  
; ce qu'est PATH_INFO. Pour plus d'informations sur PATH_INFO, voir les spécifications cgi. Définir  
; cela à 1 fera en sorte que PHP CGI corrige ses chemins pour se conformer à la spécification. Un paramètre  
; de zéro fait que PHP se comporte comme auparavant. La valeur par défaut est 1. Vous devriez corriger vos scripts  
; pour utiliser SCRIPT_FILENAME plutôt que PATH_TRANSLATED.  
; http://php.net/cgi.fix-pathinfo  
cgi.fix_pathinfo=0  
[...]  

Rechargez PHP-FPM :

sudo service php5-fpm reload

Maintenant, créez le fichier PHP suivant dans le répertoire racine du document /var/www/html :

sudo nano /var/www/html/info.php

Maintenant, nous appelons ce fichier dans un navigateur (par exemple http://192.168.1.100/info.php) :

Info PHP-FPM.

Comme vous le voyez, PHP5 fonctionne, et il fonctionne via FPM/FastCGI, comme indiqué dans la ligne Server API. Si vous faites défiler plus bas, vous verrez tous les modules qui sont déjà activés dans PHP5. MySQL n’y est pas listé, ce qui signifie que nous n’avons pas encore de support MySQL dans PHP5.

6 Obtenir le support MariaDB / MySQL dans PHP

Pour obtenir le support MySQL dans PHP, nous pouvons installer le package php5-mysqlnd. Il est judicieux d’installer quelques autres modules PHP5 également, car vous pourriez en avoir besoin pour vos applications. Vous pouvez rechercher les modules PHP5 disponibles comme ceci :

apt-cache search php5

Choisissez ceux dont vous avez besoin et installez-les comme ceci :

sudo apt-get install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu est un cache d’opcode PHP gratuit pour mettre en cache et optimiser le code intermédiaire PHP. Il est similaire à d’autres caches d’opcode PHP, tels que eAccelerator et Xcache. Il est fortement recommandé d’en avoir un installé pour accélérer votre page PHP.

APC peut être installé comme suit :

sudo apt-get install php5-apcu

Maintenant, rechargez PHP-FPM :

sudo service php5-fpm reload

Maintenant, rechargez http://192.168.1.100/info.php dans votre navigateur et faites défiler vers le bas jusqu’à la section des modules à nouveau. Vous devriez maintenant trouver beaucoup de nouveaux modules là-bas, y compris le module MySQL :

Info PHP-FPM - partie 2

7 Faire en sorte que PHP-FPM utilise une connexion TCP

Par défaut, PHP-FPM écoute sur le socket /var/run/php5-fpm.sock. Il est également possible de faire en sorte que PHP-FPM utilise une connexion TCP. Pour ce faire, ouvrez /etc/php5/fpm/pool.d/www.conf…

sudo nano /etc/php5/fpm/pool.d/www.conf

… et faites en sorte que la ligne listen ressemble à ceci :

[...]  
;listen = /var/run/php5-fpm.sock  
listen = 127.0.0.1:9000  
[...]  

Cela fera en sorte que PHP-FPM écoute sur le port 9000 sur l’IP 127.0.0.1 (localhost). Assurez-vous d’utiliser un port qui n’est pas utilisé sur votre système.

Ensuite, rechargez PHP-FPM :

sudo php5-fpm reload

Ensuite, parcourez votre configuration nginx et tous vos hôtes virtuels et changez la ligne fastcgi_pass unix:/var/run/php5-fpm.sock; en fastcgi_pass 127.0.0.1:9000;, par exemple comme ceci :

sudo nano /etc/nginx/sites-available/default
[...]  
 location ~ \.php$ {  
   include snippets/fastcgi-php.conf;  
  
   # Avec php5-cgi seul :  
   fastcgi_pass 127.0.0.1:9000;  
   # Avec php5-fpm :  
   # fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
[...]  

Enfin, rechargez nginx :

sudo service nginx reload

8 Téléchargement de l’image de machine virtuelle de ce tutoriel

Ce tutoriel est disponible sous forme d’image de machine virtuelle prête à l’emploi au format ovf/ova, compatible avec VMWare et Virtualbox. L’image de machine virtuelle utilise les détails de connexion suivants :

Connexion SSH / Shell

Nom d’utilisateur : administrator
Mot de passe : howtoforge

Cet utilisateur a des droits sudo.

Connexion MariaDB

Nom d’utilisateur : root
Mot de passe : howtoforge

L’IP de la VM est 192.168.1.100, elle peut être changée dans le fichier /etc/network/interfaces. Veuillez changer tous les mots de passe ci-dessus pour sécuriser la machine virtuelle.

9 Liens

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.