# Mise en place serveur NGINX

Dans cet article, nous montrerons comment installer NGINX, un serveur web open-source dont les principales fonctionnalités sont de fonctionner comme un reverse-proxy et un répartiteur de charge.

NGINX peut être installé sur plusieurs distributions Linux (Ubuntu, Debian etc). La documentation complète est disponible sur le site officiel de [NGINX](https://nginx.org/en/linux_packages.html).

## **Installation**

Ici, l'installation se fera sur Debian.

1. Mettre à jour les paquets
    
    ```bash
    sudo apt update
    sudo apt upgrade
    ```
    
2. Installez les prérequis et la clé de signature officielle NGINX:
    
    ```bash
    sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
    curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
        | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    ```
    
3. Configurer le dépôt apt pour les paquets nginx stables
    
    ```bash
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    ```
    
4. Installer NGINX
    
    ```bash
    sudo apt update
    sudo apt install nginx
    ```
    
5. Démarrer NGINX
    
    ```bash
    sudo systemctl start nginx
    sudo systemctl enable nginx
    ```
    
    Vous devez donc pouvoir accéder à la page d'accueil de NGINX avec l'url `http://192.168.2.94` avec l'IP de votre machine.
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725255809867/057ab9dd-5234-4706-b7b3-43cf4943c947.png align="center")
    

Par défaut, il exécute le fichier index.html situé dans le répertoire `/usr/share/nginx/html/index.html`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725809254802/4a5f6ab8-51a2-486d-b491-50f2ca79b1ec.png align="center")

## **Configuration de Nginx**

Il faut maintenant configurer le fichier de configuration principal de NGINX, `nginx.conf` ,situé dans le répertoire `/etc/nginx/`. Ce fichier définit la manière dont Nginx se comporte pour gérer les requêtes, les log etc, ainsi que les paramètres par défaut. Plus, d'informations sur les commandes sont disponibles sur le site officiel de Nginx [ici](https://nginx.org/en/docs/ngx_core_module.html).

Voici par défaut , le fichier `nginx.conf` après une première installation.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725284152254/611352ef-a4dd-41de-94b9-f39b531b1128.png align="center")

* user: définit l'utilisateur sous lequel NGINX s'exécute.
    
* worker\_processes: configure le nombre de processus de travail en fonction du nombre de cœurs CPU disponibles. La valeur `auto` permet de déterminer automatiquement le nombre de processus en fonction du nombre de core CPU disponible.
    
* error\_log: spécifie le fichier où les erreurs sont consignées.
    
* pid: définit le fichier PID dans le lequel le processus principal est enrégistré.
    
* Le bloc events: gère les paramètres de connexions
    
    * worker\_connections : détermine le nombre maximum de connexions simultanées qu'un processus de travail peut gérer.
        
* le bloc http: gère les paramètres pour le serveur HTTP
    
    * access\_log: spécifie le fichier où les journaux d'accès sont consignés.
        
    * sendfile: active l'envoi de fichiers pour une meilleur performance
        
    * keepalive\_timeout: définit le délai d'attente pour les connexions persistantes
        

## Configuration d'un hôte/serveur virtuel

Un hôte virtuel est une configuration qui permet à un serveur de servir ou d'héberger un ou plusieurs sites web. Cette configuration permet de simplier la gestion des serveurs. Chaque site web sera configuré à l'intérieur d'un bloc `server`. Les configurations sont faites dans le repertoire `/etc/nginx/conf.d` où il peut il y avoir plusieurs fichiers de configurations `.conf` . Par défaut, le répertoire `conf.d` contient le fichier suivant `default.conf` :

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725285256009/5bf53374-2c66-4581-acc4-a17b7ed9f433.png align="center")

* le bloc server: représente la configuration pour un serveur virtuel. Il est possible de configurer plusieurs blocs `server` dans un même fichier `.conf` pour différents sites. Chaque bloc server définit dans ce cas, des configurations ou paramètres distincts pour différents sites.
    
* listen: définit le port sur lequel le serveur écoute les requêtes
    
* server\_name: définit le nom du serveur virtuel
    
* le bloc location: définit le traitement des requêtes à des emplacements spécifiques.
    
* root: définit le répertoire racine
    
* index: définit les fichiers index par défaut
    
* error\_page: définit les pages d'erreur qui peuvent être personnalisées en fonction du code d'erreur.
    

## Création d'un site

Ici, on va faire afficher une autre page web assez simple à la place de `index.html`. Il suffit de créer une page html, ou si vous avez déjà un site web à afficher. Placez ensuite le chemin au niveau de root dans le fichier `default.conf`.

Ici on a mis le port 8080 car le port 80 est déja lié au serveur par default.conf.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725813962859/564ad858-bc03-4054-b951-b8082b3e186b.png align="center")

.

Après chaque modification, il faut faire `systemctl restart ngix` pour redémarrez et pour vérifier qu'il n'y ait pas d'erreurs potentielles dans le fichier .conf, exécutez la commande `nginx -t`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725813019390/a6fd2109-d009-4f1d-9548-3497ac73e66d.png align="center")

## Ajout d'un module SSL pour sécuriser NGINX avec LetsEncrypt

Pour cette partie, il faudra que vous ayez un site accessible et soyez propriétaires d'un nom de domaine et configuré le DNS. Ici on a bien une connexion http, non sécurisée.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725817143410/cd139d86-562d-41d5-98cb-dffccdd299b0.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725817227416/69193090-2030-4a46-b0c3-018846490f64.png align="center")

Faire la mise à jour des paquets

```bash
sudo  apt-get update
```

Installer Certbot et le module pour NGINX . Certbot est un outil qui facilite la demande et l'installation des certificats SSL de Let's Encrypt.

```bash
sudo apt-get install certbot python3-certbot-nginx
```

Utilisez Certbot pour demander un certificat SSL et configurer NGINX automatiquement. Remplacez `website.com` par votre propre nom de domaine ou de votre sous-domaine.  
\*\*\*(--nginx pour prexiser qu'on a un serveur nginx)

```bash
 sudo certbot --nginx -d website.com
```

Après une série de questions, le certifcat et la clé privée seront délivreés dans un repertoire automatiquement créé `/etc/letsencrypt/`. Ils seront automatiquement intégrés dans la configuration de NGINX.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725817804582/22418660-3744-4824-b7dd-c38858d5c17a.png align="center")

Le fichier de configuration de NGINX sera automatiquement modifié et les certifcats SSL seront ajoutés.Vous pouvez cependant les ajuster si nécessaire pour éviter les conflits.

Voici un exemple de configuration SSL que vous pourriez avoir dans votre fichier

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1726660690336/a8b65bed-fd82-45ef-a640-f7dacd129343.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1725819713061/2acf7dac-ec1c-40a8-bc36-4e270ec93233.png align="center")

On voit qu’on a bien un serveur sécurisé avec HTTPS.  
Il est aussi important de noter que Let’s Encrypt ne délivre que des certificats SSL aux sites accesibles publiquement, et pas ceux en local. Pour les sites internes ou locaux, vous pouvez utiliser des certificats auto-signés ou des certificats payants auprès d’autorités de certificats.

L'installation et la configuration de NGINX sur Debian permettent de créer un serveur web performant et sécurisé. En suivant les étapes décrites, vous pouvez facilement déployer NGINX et sécuriser vos sites web avec des certificats SSL.
