Debian – comment installer Nginx en tant que serveur Web ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment mettre en place un serveur Web Nginx sur Debian 10, dans le but d'héberger un site Web qui s'appuie sur PHP.
Nginx, que l'on prononce Engine-X, est un logiciel open source qui permet de monter un serveur web, mais également un reverse proxy pour mettre en cache des éléments et assurer la répartition de charge entre plusieurs serveurs Web.
À la différence d'Apache, Nginx est pensé pour les sites à très fort trafic : il est d'ailleurs connu et reconnu pour être un logiciel très performant. Dans de nombreux cas, il n'est pas utilisé en tant que serveur Web directement, mais plutôt en tant que reverse proxy pour gérer les connexions des clients en frontal.
Pour ma part, je vais utiliser une machine sous Debian 10 pour mettre en place le serveur Nginx.
🎥 Débutez avec Nginx grâce à ce tutoriel vidéo (installation, création d'un site, intégration de PHP, mise en place d'un certificat SSL, etc.).
II. Installer Nginx
Commençons par installer le paquet Nginx, mais avant cela mettons à jour le cache de paquets sur notre machine :
sudo apt update -y
Ensuite, on passe à l'installation du paquet Nginx, ce qui est très simple puisqu'il est disponible dans les dépôts officiels.
sudo apt install nginx -y
Lorsque l'installation est effectuée, on peut regarder quelle version est installée à l'aide de la commande suivante (similaire à celle d'Apache ou d'autres paquets) :
sudo nginx -v
Suite à l'installation, le serveur Nginx est déjà démarré, on peut le vérifier avec la commande ci-dessous. Cela permettra de voir qu'il est bien actif.
sudo systemctl status nginx
Pour que notre serveur Web Nginx démarre automatiquement lorsque la machine Linux démarre ou redémarre, on doit exécuter la commande suivante :
sudo systemctl enable nginx
Dès à présent, on peut accéder à la page par défaut du serveur Web à partir d'un navigateur. Si votre machine où est installé Nginx dispose d'une interface graphique, on peut y accéder en local :
http://127.0.0.1
À partir d'une machine distante, utilisez l'adresse IP de votre serveur Web plutôt que l'adresse de loopback (127.0.0.1). Voici la page qui doit s'afficher :
Le contenu de cette page Web correspond au fichier suivant :
/var/www/html/index.nginx-debian.html
En fait, le site par défaut de Nginx est déclaré dans le fichier de configuration suivant :
/etc/nginx/sites-enabled/default
La racine de ce site est :
/var/www/html
On peut le vérifier grâce à la directive suivante :
root /var/www/html;
Avant de continuer, prenez connaissance des informations suivantes :
- Le fichier de configuration global de Nginx est :
/etc/nginx/nginx.conf
- Le dossier qui contient les fichiers de configuration des sites disponibles est :
/etc/nginx/sites-available/
- Le dossier qui contient les fichiers de configuration des sites actifs est :
/etc/nginx/sites-enabled/
Lorsque l'on crée la configuration d'un nouveau site, on crée le fichier dans "sites-available" et ensuite lorsque le site est prêt à être activé, on crée un lien symbolique vers "sites-enabled". Cela tombe bien, nous allons créer notre premier site Web dans Nginx : l'occasion de voir ce mécanisme, identique à Apache.
III. Créer un premier site dans Nginx
Nous allons déclarer un nouveau site sur notre serveur Web Nginx. Pour ma part, ce sera le site "it-connect.tech", accessible également avec "www.it-connect.tech". Il sera stocké à l'emplacement suivant : /var/www/it-connect.tech.
Commençons par créer le dossier qui va accueillir notre site Web :
sudo mkdir /var/www/it-connect.tech
Ensuite, on va déclarer l'utilisateur www-data comme propriétaire de ce dossier. Il s'agit de l'utilisateur par défaut de Nginx (correspondant à la propriété "user www-data" du fichier nginx.conf).
sudo chown -R www-data:www-data /var/www/it-connect.tech/
On va définir les droits de ce dossier :
sudo chmod 755 /var/www/it-connect.tech/
Ensuite, c'est le moment de créer notre fichier "index.html" : cela correspond à la page d'accueil de notre site Web.
sudo nano /var/www/it-connect.tech/index.html
Dans ce fichier, insérez le code suivant :
<html> <head></head> <body> <h1>Bienvenue sur IT-Connect !</h1> </body> </html>
Enregistrez et fermez le fichier. Il est temps maintenant de créer le fichier de configuration de notre site Internet. Dans le dossier "sites-available", on va créer le fichier "it-connect.tech" : grâce à ce nom, il sera facilement identifiable.
sudo nano /etc/nginx/sites-available/it-connect.tech
Dans ce fichier, intégrez la configuration suivante :
server { listen 80; listen [::]:80; root /var/www/it-connect.tech; index index.html; server_name it-connect.tech www.it-connect.tech; location / { try_files $uri $uri/ =404; } }
Voici quelques consignes à appliquer quand vous éditez ce fichier, mais aussi pour bien le comprendre :
- Respectez l'indentation (espace au début des lignes) pour avoir un fichier de configuration lisible facilement
- Les lignes de type "commentaires" commencent par le caractère "#"
- Les lignes qui se terminent par ";" correspondent à des directives, c'est-à-dire des options de configuration
- Le bloc "Server" permet de déclarer un hôte virtuel et à l'intérieur on déclare sa configuration
Maintenant, je vais vous expliquer la signification des différentes directives de la configuration que l'on vient de créer.
listen 80; listen [::]:80;
La directive "listen" : la première ligne permet d'indiquer que le serveur Nginx écoute sur toutes ses adresses IPv4, sur le port 80, ce qui correspond au protocole HTTP. La seconde ligne est similaire, mais pour toutes les adresses IPv6 du serveur, toujours sur le port 80.
Pour que le serveur Web écoute seulement sur une adresse IP spécifique du serveur Linux, on pourrait utiliser :
listen 192.168.100.100:80;
En admettant que 192.168.100.100 soit l'adresse IP du serveur Linux.
root /var/www/it-connect.tech;
La directive "root" permet de déclarer la racine du site Internet : en toute logique, on précise la racine que l'on a créée précédemment et où se situe la page index.html.
index index.html;
D'ailleurs, c'est la directive "index" qui permet d'indiquer le nom (ou les noms) des pages par défaut du site. Si l'on définit "index.html", lorsque l'on accède à la racine du site, le serveur Web va chercher à nous présenter le contenu de la page index.html.
server_name it-connect.tech www.it-connect.tech;
La directive "server_name" sert à déclarer le nom de domaine, ou les noms de domaine, concerné par ce bloc "Server". On peut également utiliser une adresse IP. En l'occurrence dans cet exemple, on souhaite que Nginx traite les requêtes qui arrivent sur it-connect.tech et www.it-connect.tech.
location / { try_files $uri $uri/ =404; }
Intéressons-nous au dernier bloc de notre fichier de configuration. La directive "location" permet d'indiquer un chemin relatif dans l'URL. En indiquant "/", on cible toutes les requêtes puisqu'une requête commence toujours par "/" après le nom de domaine pour spécifier le chemin vers une page.
Enfin, grâce à la directive "try_files" suivie de $uri et $uri/, nous allons chercher à vérifier l'existence du fichier ou du dossier (d'où le "/") passé en paramètre dans l'URL. La variable $uri reprend automatiquement l'URL saisie par le client qui accède au site. En fait, la règle "try_files $uri $uri/ =404;" permet de retourner une erreur 404 (page introuvable) au client s'il essaie d'accéder à un fichier ou un dossier qui n'existe pas.
Maintenant que vous en savez plus sur la configuration que nous venons de créer, vous pouvez passer à la suite ! 😉
Pour que notre site soit actif et la configuration chargée par Nginx, nous devons créer un lien symbolique : rappelez-vous de l'intérêt du dossier "sites-enabled". Pour créer un lien symbolique et renvoyer "/etc/nginx/sites-enabled/it-connect.tech" vers "/etc/nginx/sites-available/it-connect.tech", voici la commande :
ln -s /etc/nginx/sites-available/it-connect.tech /etc/nginx/sites-enabled/it-connect.tech
On pourrait copier-coller le fichier d'un dossier vers l'autre, mais cela ne serait pas pratique. Grâce à ce lien symbolique, on a qu'un seul fichier à gérer.
Avant de redémarrer le service Nginx, je vous invite à vérifier la syntaxe de la configuration :
sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
C'est tout bon, on peut redémarrer le service Nginx :
sudo systemctl restart nginx
On peut aussi arrêter Nginx et le démarrer, en deux temps :
sudo systemctl start nginx sudo systemctl stop nginx
Le site doit être accessible à deux adresses :
http://www.it-connect.tech http://it-connect.tech
Je n'ai pas abordé la notion d'enregistrement DNS, mais on part du principe que c'est déjà fait de votre côté. Si vous souhaitez tester sans agir sur les enregistrements DNS, vous pouvez modifier le fichier hosts de votre machine Windows ou Linux.
Par exemple, si vous avez une interface graphique sur votre machine Nginx (ce qui sera peut-être le cas sur un lab), vous pouvez modifier le fichier "/etc/hosts" et ajouter la ligne suivante :
0.0.0.0 it-connect.tech www.it-connect.tech
Si vous utilisez une machine distante, remplacez "0.0.0.0" par l'adresse IP de votre machine Linux.
Les fichiers de logs, c'est-à-dire les journaux de Nginx, sont stockés à l'emplacement suivant :
# Log d'accès (toutes les requêtes) /var/log/nginx/access.log # Log d'erreurs /var/log/nginx/error.log
Bien sûr, ils sont consultables avec la commande "tail" pour récupérer les dernières lignes ajoutées :
sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log
Passons à l'étape suivante pour que Nginx prenne en charge les scripts PHP.
IV. Ajouter PHP à Nginx
Pour utiliser PHP avec un serveur web Nginx, il est obligatoire d'installer PHP-FPM (PHP FastCGI Process Manager) : Nginx lui transférera les requêtes PHP pour qu'elles soient traitées.
Si l'on installe le paquet "php-fpm" de Debian 10, nous allons récupérer la version 7.3, ce qui n'est pas top. Il vaut mieux récupérer une version plus récente, par exemple PHP-FPM 7.4.X. Pour cela, nous devons agir sur les dépôts de notre machine. Exécutez les commandes suivantes pour ajouter notre nouveau dépôt PPA :
sudo apt-get update
On récupère la clé GPG du dépôt que l'on va ajouter :
sudo apt -y install lsb-release apt-transport-https ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
Enfin, on ajoute le dépôt :
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
Il ne reste plus qu'à mettre à jour le cache de paquets et à installer PHP-FPM 7.4 :
sudo apt-get update sudo apt-get install php7.4-fpm
En complément, et selon ce que vous souhaitez faire sur votre serveur Web Nginx, pensez à installer les extensions PHP qui vont bien (pour MySQL, par exemple).
Nous devons modifier la configuration de notre site :
sudo nano /etc/nginx/sites-available/it-connect.tech
Le bout de configuration suivant doit être ajouté au sein du groupe "Server", à la suite du bloc "location" déclaré précédemment :
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; }
Ce qui donne :
Grâce à la directive "location ~ \.php$", on peut agir sur le traitement de tous les fichiers PHP. Ce qui est fort intéressant puisque l'on va pouvoir préciser le fichier de configuration (fastcgi-php.conf) et le chemin vers le socket lié à PHP-FPM, c'est-à-dire le chemin vers php7.4-fpm.sock. Si vous utilisez une version différente de PHP-FPM, le chemin devra être adapté.
Lorsque la configuration est prête, enregistrez le fichier et redémarrez le service Nginx. Avant cela, pensez à vérifier qu'il n'y a pas d'erreur de syntaxe :
sudo nginx -t sudo systemctl restart nginx
V. Vérifier le bon fonctionnement de PHP avec Nginx
Notre serveur Nginx doit être en mesure de gérer l'exécution des scripts PHP. Nous allons le vérifier. Je vous invite à créer un fichier "info.php" à la racine de notre site Web :
sudo nano /var/www/it-connect.tech/info.php
Dans ce fichier, ajoutez le contenu ci-dessous. Pour rappel, la fonction phpinfo() permet d'obtenir un état détaillé de PHP sur un serveur Web.
<?php
phpinfo();
?>
Enregistrez le fichier et tentez d'accéder à la page info.php avec un navigateur. Normalement, vous devez obtenir une page similaire à celle ci-dessous. On peut voir que PHP fonctionne et que j'utilise bien PHP 7.4.
Voilà ! Votre serveur Web sous Nginx est prêt à être utilisé !
Bonjour,
J’ai suivi vos directives pour créer un premier serveur web, mais lorsque je tapes le nom de mon site, il me fait apparaître la page de Default.
Pourriez-vous m’aider svp?
Meri d’avance.
Christophe
Bonjour,
Vous savez, lorsqu’on est persuadé qu’on n’est pas fait pour quelque chose ou un domaine en particulier…
Et que grâce à un évènement précis, ou des conseils avisés, on se rend compte qu’en fait on est pas si bête que ça.
Eh ben, je vous remercie.
Sincèrement !
Merci pour cette doc super-claire. J’avais déjà essayé d’installer nginx sans succès et là … aucun problème.
Bonjour,
Je constate que la documentation est à publié depuis plus de deux ans maintenant mais continue d’aider grand nombre de personnes.
Merci à vous Florian
Y-a-t-il un moyen de percevoir des dons pour vous encourager ?
Bonne continuation.
Correction » La publication à été publiée «
Bonjour Florian,
Merci pour tous les tutos super fonctionnels que tu nous partages.
Je recherche depuis un moment comment faire un site web un peu spécifique.
Dans un contexte AD sur Microsoft Server 2019, je souhaiterais faire une site annuaire. Je m’explique.
Dans mon entreprise, la personne à l’accueil partage un pdf avec toutes les coordonnées des personnes. Je souhaiterais arrêter ce système, car chronophage et trop de « manutention ».
Comment faire une page web interne type annuaire, synchronisée à l’AD?
Merci!!!
Bonjour Florian
Merci pour tout
Je veux installer nginx sur ubuntu server en virtuel
Je dois mettre le réseau de ma machine virtuelle ubuntu server sous *accès par pont* ou quoi ?