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-clientMariaDB 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_installationVous 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] <-- y3 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 apache2Si 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 apache2Maintenant, nous pouvons installer nginx.
sudo apt-get install nginxDémarrez Nginx ensuite :
sudo systemctl start nginx.service
sudo systemctl enable nginx.serviceTapez 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 :

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 :

Ou vous vérifiez dans le shell que nginx est en cours d’exécution avec :
ps aux | grep nginxLe résultat devrait montrer les processus nginx comme ceci :

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-fpmPHP-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.confLa 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 reloadEnsuite, 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 reloadMaintenant, créez le fichier PHP suivant dans le répertoire racine du document /var/www/html :
sudo nano /var/www/html/info.phpMaintenant, nous appelons ce fichier dans un navigateur (par exemple http://192.168.1.100/info.php) :

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 php5Choisissez 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-xslAPCu 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-apcuMaintenant, rechargez PHP-FPM :
sudo service php5-fpm reloadMaintenant, 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 :

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 reloadEnsuite, 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 reload8 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
- nginx : http://nginx.net/
- wiki nginx : http://wiki.codemongers.com/Main
- PHP : http://www.php.net/
- PHP-FPM : http://php-fpm.org/
- MySQL : http://www.mysql.com/
- Ubuntu : http://www.ubuntu.com/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.