Nginx : Installez et configurez le serveur Web !

Formation

Tutorial Thumbnail

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 !


Prérequis

Afin de réaliser l'installation de Nginx sur votre serveur, quelques prérequis sont nécessaires :

  • Une machine Linux : Ubuntu, Debian ou autre distribution.
  • 1 cƓur CPU.
  • 200MB de mĂ©moire vive (RAM) de disponible.
  • 4GB de libre sur le disque.
  • Permissions sudo.

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.


Connexion en SSH Ă  la machine

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


Mise Ă  jour du systĂšme

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


Installation de Nginx

En une commande, on effectue l'installation de Nginx sur le systĂšme :

sudo apt install nginx nginx-full



Configuration de Nginx

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/.


Supprimer la signature du serveur

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 :


Redémarrer le Daemon Nginx

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


Configuration de votre site internet

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.


Création du fichier de configuration

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 listendefault_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


Activation du site internet

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


RĂ©sultat final

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 ! ✌

Niveau DĂ©butant

Technologie utilisée :

Proposer une modification
Antoine
Par Antoine
Rédigé le Mercredi 05 Octobre 2022