Formation
Nginx Open Source15 ou NGINX est un logiciel libre de serveur Web (ou HTTP) ainsi qu'un proxy inverse écrit par Igor Sysoev, dont le développement a débuté en 2002 pour les besoins d'un site russe à très fort trafic (Rambler). La documentation est disponible dans plusieurs langues. C'est depuis avril 2019 que le serveur web est le plus utilisé au monde, d'après Netcraft16, ou le deuxième serveur le plus utilisé d'après W3techs17.
Ce tutoriel présentera l'installation et la configuration de ce serveur Web afin de rendre disponible votre premier site Web statique !
Afin de réaliser l'installation de Nginx sur votre serveur, quelques prérequis sont nécessaires :
Dans notre laboratoire, nous aurons une machine Debian 11 qui fera office de serveur Web Apache et une machine sous Windows 11 qui fera office de client Web.
Afin de faciliter l'installation, il est conseillé de se connecter en SSH à la machine avec la commande suivante :
ssh nom_d_utilisateur@adresse_ip_de_la_machine -p numéro_de_port
Afin de se tenir aux dernières mises à jour, on mets à jour dans un premier temps la liste des dépôts afin de prendre en compte nos ajouts et ainsi que la mise à jour des programmes existants sur la machine :
sudo apt update
sudo apt upgrade -y
En une commande, on effectue l'installation de Nginx sur le système :
sudo apt install nginx nginx-full
Une fois l’installation a été effectuée, le serveur Web Nginx est opérationnel. En se rendant sur un navigateur Web et en saisissant l'adresse URL ou l'adresse IP correspondante, une page par défaut apparait :
Cependant, il est nécessaire de réaliser une configuration afin de rendre disponible un site Web particulier. Les éléments de configurations de Nginx se situent dans le dossier /etc/nginx/
:
cd /etc/nginx
La configuration globales de Nginx est disponible dans le fichier global nginx.conf
:
vi nginx.conf
Exemple de fichier de configuration par défaut :
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Vous pouvez retrouver toute la documentation officielle de Nginx depuis le lien suivant : http://nginx.org/en/docs/.
Dans le cas où un utilisateur accède à une page d'erreur de Nginx, ce dernier mentionne la version du serveur Web, ce qui n'est pas tip-top niveau sécurité...
C'est pour cela qu'il est nécessaire de masquer cette information. Dans le fichier /etc/nginx/nginx.conf
(fichier global de Nginx), décommentez la valeur suivante :
server_tokens off;
Ou exécutez la commande "Sed" dans le terminal Linux. Cette commande décommente simplement la ligne server_tokens off;
dans le fichier /etc/nginx/nginx.conf
:
sed -i 's/# server_tokens off;/server_tokens off;/g' /etc/nginx/nginx.conf
Voici le résultat final, après redémarrage du service :
Afin de prendre en compte les modifications effectuées et que la configuration soit prise en compte, il est nécessaire de redémarrer le Daemon de Nginx :
sudo systemctl restart nginx
Pour la configuration, il est nécessaire de créer un fichier dédié pour chaque site que vous souhaitez héberger sur votre serveur Web Nginx. C'est pour cela que l'on va parler de fichier de configuration Nginx, caractérisé par l'extension .conf
. Généralement, la syntaxe la plus appropriée pour un fichier sera de respecter la nomenclature sous la forme de <domain.nd>.conf
. Par exemple : cosmotech.cf.conf.
Afin de créer un site, on va créer fichier de configuration dédié. On va ensuite ouvrir ce fichier afin d'y ajouter notre configuration pour le domaine cosmotech.cf
:
cd /etc/nginx/conf.d && touch cosmotech.cf.conf
vi !$
Voici un exemple du fichier de configuration Nginx pour ajouter un vHost Nginx pour votre site (éditez les valeurs afin de faire correspondre les informations pour votre site) :
server {
listen 80;
listen [::]:80;
# Nameserver & Www Root Folder
server_name cosmotech.cf 192.168.100.10;
root /var/www/cosmotech.cf;
# Remove Nginx version
server_tokens off;
location / {
# Disable browseable folder
autoindex off;
# Allow index files for Www Root
index index.html index.php;
}
# Nginx Logs
access_log /var/log/nginx/cosmotech.cf.access.log;
error_log /var/log/nginx/cosmotech.cf.error.log;
# Security Headers
# add_header Strict-Transport-Security "max-age=63072000" always; #// HSTS
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";
# Deny .htaccess access file
location ~ /\.ht {
deny all;
}
# Robots.txt
location = /robots.txt {
log_not_found off;
access_log off;
}
# Custom Errors Pages
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 /500.html;
error_page 503 /503.html;
}
Voici un fichier de configuration pour un serveur HTTP sur le port 80 en IPv4 (listen 80;
) et IPv6 (listen [::]:80;
). Ce fichier de configuration présente l'état que le site cosmotech.cf doit avoir.
Dans cette configuration, Nginx teste uniquement le champ d’en-tête de la requête "Hôte" pour déterminer vers quel serveur la demande doit être acheminée. Si la valeur ne correspond à aucun nom de serveur ou si la requête ne contient pas du tout ce champ d’en-tête, Nginx acheminera la demande vers le serveur par défaut pour ce port. Dans la configuration ci-dessus, le serveur par défaut est le premier, ce qui est le comportement par défaut standard de Nginx.
Il peut également être défini explicitement quel serveur doit être par défaut, avec le paramètre dans la directive listen: default_server
server {
listen 80 default_server;
server_name cosmotech.cf;
...
}
À vous de modifier ensuite les valeurs correspondante à votre futur site Web tel que le nom de domaine du site, l'adresse IP locale du serveur Web Nginx et ainsi que le répertoire racine que l'utilisateur www-data va lire : c'est à dire la racine de votre site Web.
Si le dossier racine de votre site n'existe pas, créez le avec la commande :
sudo mkdir -p /var/www/<domain.ltd>
On va créer une page de test HTML afin de vérifier si le site web fonctionne convenablement :
echo "HTTP OK" > /var/www/cosmotech.cf/index.html
Afin d'activer notre configuration, on vérifie si la configuration est correcte et on recharge ensuite Nginx :
sudo nginx -t
sudo nginx -s reload
Et voilà votre serveur Web installé et configuré où l'on visualise correctement notre page d'essai dans le répertoire "/var/www/index.html" contenant le texte : "HTTP OK" ! 🎉
C’est la fin de ce tutoriel ! Votre site internet est pleinement fonctionnel !
Vous pouvez poursuivre ce tutoriel afin de configurer votre serveur Web avec un joli certificat TLS ! À tout de suite !