Serveur Web · 8 min read · Oct 13, 2025

Installation de Nginx avec PHP 7 et MySQL 5.7 (LEMP) sur Ubuntu 16.04 LTS

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 16.04 avec un support PHP 7 (via PHP-FPM) et un support MySQL 5.7 (LEMP = L inux + nginx (prononcé “ e ngine x”) + M ySQL + P HP).

1 Remarque Préliminaire

Dans ce tutoriel, j’utilise 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é.

J’exécute toutes les étapes de ce tutoriel avec des privilèges root, donc assurez-vous que vous êtes connecté en tant que root :

sudo -s

2 Installation de MySQL 5.7

Pour installer MySQL, nous exécutons :

apt-get -y install mysql-server mysql-client

On vous demandera de fournir un mot de passe pour l’utilisateur root de MySQL - ce mot de passe est valide pour l’utilisateur root@localhost ainsi que [email protected], donc nous n’avons pas besoin de spécifier un mot de passe root MySQL manuellement plus tard :

Nouveau mot de passe pour l’utilisateur MySQL “root” : <– votremotdepasse Répétez le mot de passe pour l’utilisateur MySQL “root” : <– votremotdepasse

Pour sécuriser le serveur de base de données et supprimer l’utilisateur anonyme et la base de données de test, exécutez la commande mysql_secure_installation.

mysql_secure_installation

On vous posera ces questions :

root@server1:~# mysql_secure_installation
Sécurisation du déploiement du serveur MySQL.
Entrez le mot de passe pour l'utilisateur root : <-- Entrez le mot de passe root MySQL
VALIDATE PASSWORD PLUGIN peut être utilisé pour tester les mots de passe
et améliorer la sécurité. Il vérifie la force du mot de passe
et permet aux utilisateurs de définir uniquement les mots de passe qui sont
suffisamment sécurisés. Souhaitez-vous configurer le plugin VALIDATE PASSWORD ?
Appuyez sur y|Y pour Oui, toute autre touche pour Non : <-- Appuyez sur y si vous voulez cette fonction ou appuyez sur Entrée sinon.
Utilisation du mot de passe existant pour root.
Changer le mot de passe pour root ? ((Appuyez sur y|Y pour Oui, toute autre touche pour Non) : <-- Appuyez sur Entrée
... sautant.
Par défaut, une installation MySQL a un utilisateur anonyme,
permettant à quiconque de se connecter à MySQL sans avoir à avoir
un compte utilisateur créé pour eux. Ceci est destiné uniquement à
des fins de test, et pour rendre l'installation un peu plus fluide.
Vous devriez les supprimer avant de passer à un environnement de production.
Supprimer les utilisateurs anonymes ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : <-- y
Succès.

Normalement, root ne devrait être autorisé à se connecter que depuis
'localhost'. Cela garantit que quelqu'un ne peut pas deviner le
mot de passe root depuis le réseau.
Interdire la connexion root à distance ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : <-- y
Succès.
Par défaut, MySQL est livré avec une base de données nommée 'test' que
quiconque peut accéder. Ceci est également destiné uniquement à des fins de test,
et doit être supprimé avant de passer à un environnement de production.

Supprimer la base de données de test et l'accès à celle-ci ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : <-- y
- Suppression de la base de données de test...
Succès.
- Suppression des privilèges sur la base de données de test...
Succès.
Recharger les tables de privilèges garantira que tous les changements
faits jusqu'à présent prendront effet immédiatement.
Recharger les tables de privilèges maintenant ? (Appuyez sur y|Y pour Oui, toute autre touche pour Non) : <-- y
Succès.
Tout est fait !

MySQL est maintenant sécurisé.

3 Installation de Nginx

Dans le cas où vous avez déjà installé Apache2, alors retirez-le d’abord avec ces commandes & puis installez nginx :

service apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2

Nginx est disponible en tant que package pour Ubuntu 16.04 que nous pouvons installer.

apt-get -y install nginx

Démarrez nginx ensuite :

service nginx start

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

La page par défaut de Nginx sur Ubuntu.

Le document root par défaut de nginx sur Ubuntu 16.04 est /var/www/html.

4 Installation de PHP 7

Nous pouvons faire fonctionner PHP 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 des sites de toute taille, en particulier les sites plus fréquentés) que nous installons comme suit :

apt-get -y install php7.0-fpm

PHP-FPM est un processus daemon (avec le script d’initialisation php7.0-fpm) qui exécute un serveur FastCGI sur le socket /run/php/php7.0-fpm.sock.

5 Configuration de nginx

La configuration de nginx se trouve dans /etc/nginx/nginx.conf que nous ouvrons maintenant :

nano /etc/nginx/nginx.conf

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

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

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

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

nano /etc/nginx/sites-available/default
[...]
server {
 listen 80 default_server;
 listen [::]:80 default_server;

 # Configuration SSL
 #
 # listen 443 ssl default_server;
 # listen [::]:443 ssl default_server;
 #
 # Remarque : Vous devriez désactiver gzip pour le trafic SSL.
 # Voir : https://bugs.debian.org/773332
 #
 # Renseignez-vous 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.html index.htm index.nginx-debian.html;

 server_name _;

 location / {
 # Première tentative de servir la requête 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 php7.0-cgi seul :
 # fastcgi_pass 127.0.0.1:9000;
 # Avec php7.0-fpm :
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }

 # interdire l'accès aux fichiers .htaccess, si le document root d'Apache
 # coïncide avec celui de nginx
 #
 location ~ /\.ht {
  deny all;
 }
}
[...]

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

root /var/www/html; signifie que le document root est le répertoire /var/www/html.

La partie importante pour PHP est le bloc location ~ .php$ {}. Décommentez-le pour l’activer.

Maintenant, enregistrez le fichier et rechargez nginx :

service nginx reload

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

nano /etc/php/7.0/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
; 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 réglage
; de zéro fait que PHP se comporte comme avant. 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 :

service php7.0-fpm reload

Maintenant, créez le fichier PHP suivant dans le document root /var/www/html :

nano /var/www/html/info.php

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

PHP Info sur Ubuntu avec Nginx.

Comme vous le voyez, PHP 7 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 PHP. MySQL n’est pas listé là, ce qui signifie que nous n’avons pas encore de support MySQL dans PHP.

6 Obtenir le support MySQL dans PHP 7

Pour obtenir le support MySQL dans PHP, nous pouvons installer le package php7.0-mysql. C’est une bonne idée d’installer quelques autres modules PHP également car vous pourriez en avoir besoin pour vos applications. Vous pouvez rechercher les modules PHP disponibles comme ceci :

apt-cache search php7.0

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

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

APCu est une extension pour le module Opcache de PHP qui vient avec PHP 7, elle ajoute quelques fonctionnalités de compatibilité pour les logiciels qui prennent en charge le cache APC (par exemple, les plugins de cache Wordpress).

APCu peut être installé comme suit :

apt-get -y install php-apcu

Maintenant, rechargez PHP-FPM :

service php7.0-fpm reload

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

Les modules PHP ont été installés.

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

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

nano /etc/php/7.0/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 :

php7.0-fpm reload

Ensuite, parcourez votre configuration nginx et tous vos vhosts et changez la ligne fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; en fastcgi_pass 127.0.0.1:9000;, par exemple comme ceci :

nano /etc/nginx/sites-available/default
[...]
        location ~ \.php$ {
 include snippets/fastcgi-php.conf;

 # Avec php7.0-cgi seul :
 fastcgi_pass 127.0.0.1:9000;
 # Avec php7.0-fpm :
 # fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }
[...]

Enfin, rechargez nginx :

service nginx reload

C’est tout. Le serveur Nginx LEMP est installé.

8 Liens

Share: X/Twitter LinkedIn

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

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