Contenu
C’est quoi Nginx?
Nginx est un serveur web de contenu statique. Mais il a d’autres fonctionnalités qui font son attrait, et parmi les plus souvent cités, le reverse proxy.
On a vu comment installer Nginx en tant que serveur web, mais on va faire du reverse proxy dans cet article.
C’est quoi un reverse proxy?
Habituellement que vous sollicitez une page web, votre navigateur va directement tutoyer le serveur Apache par exemple ou NodeJs. Par contre si vous mettez un reverse proxy, c’est le reverse proxy qui va être sollicité en premier, et passer la requête ensuite au serveur Apache. Il agit comme un intermédiaire.

Pourquoi s’embête-t-on à mettre un intermédiaire entre le serveur et le navigateur? L’utilité la plus évidente est que c’est une solution pour exposer votre serveur NodeJS qui fonctionne sur le port 3000, ou votre serveur Python, tout en montrant au monde extérieur un port 80, qui est celui par défaut du Web.
Installation de Nginx
Pour faire ce tuto je vais utiliser digitalOcean, une Paas, très pratique et peu cher, à condition de détruire votre instance après usage, bref, pour apprendre le cloud et Docker par exemple c’est idéal.
Je vais créer un droplet Ubuntu avec autenthification par clé SSH, pour éviter d’avoir à me connecter à chaque fois que je vais en mode console.
sudo apt update sudo apt install nginx nginx -v cette commande sert en fait à tester si nginx est bien installé (en plus d'avoir sa version)
Maintenant on va pouvoir démarrer Nginx.
sudo systemctl start nginx Pour que Nginx puisse démmarer automatiquement au reboot, vous devriez le redémarrer avec la command esuivante : sudo systemctl enable nginx # pour checker l'état de Nginx sudo systemctl status nginx #il doit mentionner active

Casser le lien avec le fichier de configuration d’origine.
Comme nous allons utiliser Nginx en mode reverse proxy, nous allons casser le lien avec l’encien fichier de configuration et en établir un nouveau.
sudo unlink /etc/nginx/sites-enabled/default
# création d'un nouveau fichier de configuration
sudo vim /etc/nginx/sites-available/reverse-proxy
avec le contenu cidessous dans ce fichier:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
La configuration consiste en un bloc server {…} qui gère toutes les requêtes correspondant aux conditions spécifiées. Il contient les éléments suivants :
listen 80 : Le serveur écoute les requêtes HTTP entrantes sur le port 80.
server_name localhost : Le nom de domaine pour lequel ce bloc serveur est responsable. L’exemple utilise localhost pour illustrer le fonctionnement du reverse proxy .
location / {…} : La configuration pour le chemin d’URI spécifié. Ici, il correspond à toutes les requêtes (/).
proxy_pass http://127.0.0.1:8000 : Le serveur backend vers lequel NGINX redirige les requêtes. L’exemple utilise l’adresse locale sur le port 8000 (127.0.0.1:8000) comme backend de substitution. Dans un cas réel, utilisez l’URL du serveur backend approprié.
proxy_set_header : La directive permettant de définir des en-têtes HTTP pour la requête proxy. Ces en-têtes sont transmis au serveur backend et fournissent des informations supplémentaires sur la requête du client. L’exemple inclut l’en-tête Host, l’adresse IP du client et le schéma (HTTP ou HTTPS).
Remplacez le numéro de port, le nom du serveur et l’adresse du serveur backend par les données réelles. Cet exemple redirige toutes les requêtes faites à localhost vers l’adresse http://127.0.0.1:8000.
Lier le nouveau fichier de configuration
sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/ #test nginx sudo nginx -t #redémarre Nginx sudo systemctl restart nginx
Tester le reverse proxy, exemple avec Python
Créer un répertoire, faire un fichier index.html, et lancer le serveur web Python depuis ce même répertoire. Par exemple /var/www
<html> <head> <title>NGINX backend</title> </head> <body> <h1>ça marche !</h1> </body> </html> #lancer le serveur python3 -m http.server 8000
Il se peut que Python ne soit pas installé, pour Debian faites : sudo apt install python3
Test avec Curl de cette page et accès à cette même page par un navigateur.
curl http://14.35.123.45/index.html
Cas d’une application NodeJS sur le port 3000
On applique la même stratégie, on modifie le fichier pour remplacer le port 8000 par 3000.