Configurer Nginx en tant que reverse proxy

Configurer Nginx en tant que reverse proxy

Introduction

Nginx est un serveur web performant et polyvalent qui peut être utilisé comme reverse proxy (proxy inverse) pour améliorer la sécurité, la performance et la gestion du trafic des applications web.

Contrairement à un proxy classique qui agit comme un intermédiaire pour les clients accédant à Internet, un reverse proxy se situe devant un ou plusieurs serveurs backend et redirige les requêtes des clients vers ces serveurs appropriés.

« Backend » est un terme anglais signifiant littéralement « partie arrière », ou encore « sous-structure ». Dans notre cas ce sont tous les serveurs qui se trouvent derrière notre reverse-proxy.

En utilisant Nginx comme reverse proxy, il est possible de :

  • Diriger les différentes connexions sur les serveurs demandés
  • Mettre en cache les réponses pour accélérer le temps de chargement des pages
  • Gérer le SSL/TLS pour chiffrer les communications avec les clients

Schéma explicatif :

Quand un utilisateur va vouloir se rendre sur votre site web, il va entrer l'adresse IP de votre reverse proxy côté WAN avec le serveur que vous souhaiter en mettant "http://IpDeVotreReverseProxy/gitea" par exemple et le reverse proxy va faire la connexion ! Si vous utilisez un nom de domaine vous entrerez alors celui-ci à la de l'IP.

Mise en place du reverse proxy

Pour notre part, l'installation de notre reverse proxy est faites sous Debian 12 !

Comme toujours, nous allons mettre à jour notre machine dans un premier temps :

sudo apt update & upgrade

Si ce n'est pas déjà le cas, nous allons également installer Nginx :

sudo apt install nginx

Une fois installé, nous allons le démarrer :

sudo systemctl start nginx

Puis l'activer au démarrage :

sudo systemctl enable nginx

Configuration du Reverse Proxy

L’objectif est de rediriger les requêtes entrantes vers un ou des serveur(s) backend (ex: un serveur web, un serveur zabbix, etc.).

Éditer le fichier de configuration de Nginx :

sudo nano /etc/nginx/sites-available/reverse-proxy

Ajoutez la configuration suivante :

server {
    listen 80;
    server_name exemple.com;

    location / {
        proxy_pass http://192.168.1.40:3000;  # Redirige vers une application backend tournant sur le port 3000
        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;
    }
}

Nous allons ensuite activer la configuration :

sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/

Puis tester la configuration de notre fichier de configuration :

sudo nginx -t

Si la configuration vous allez avoir ces deux lignes apparaître :

Si tout est correct, redémarrez Nginx :

sudo systemctl restart nginx

Si vous avez plusieurs serveurs web avec des IP différente, vous pouvez ajouter cette section :

location / {
        proxy_pass http://192.168.1.40:3000;  
        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;
    }

Explication de la configuration :

proxy_pass http://192.168.1.40:3000;: NGINX redirige les requêtes vers l'adresse IP vers 192.168.1.40 sur le port 3000.

proxy_set_header Host $host; : Ceci permet au serveur backend de savoir sous quel nom de domaine il a été appelé.

proxy_set_header X-Real-IP $remote_addr; : Cette ligne permet d'envoyer l'adresse IP réelle du client au serveur backend au lieu de l'adresse IP de NGINX.

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; : Cela permet de voir et lister toutes les adresses IP traversées par la requête.

proxy_set_header X-Forwarded-Proto $scheme; : Cela indique au serveur backend si la requête initiale était en HTTP ou HTTPS.

Bien évidemment, les ports indiqués dans la configuration ne sont que des exemples. Veillez à les adapter en fonction des ports réellement utilisés pour communiquer avec le serveur en arrière-plan !

Exemple du fichier de configuration complet avec plusieurs serveurs :

server {
    listen 80;
    server_name exemple.com;
}

server {
    server_name exemple.com;

    location /app1/ {
        proxy_pass http://192.168.1.40:3000/;
        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;
    }

    location /app2/ {
        proxy_pass http://192.168.1.41:4000/;
        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;
    }

    location /app3/ {
        proxy_pass http://192.168.1.42:5000/;
        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;
    }
}
  • Les serveurs backend sont redirigé sur leur IP
  • Chaque application est accessible via https://exemple.com/app1/, https://exemple.com/app2/.

Configurer NGINX pour utiliser le HTTPS

Vous pouvez retrouver notre article qui vous explique comment mettre votre site en HTTPS.

Il vous suffira juste de modifier la configuration de votre NGINX et ajouter les lignes qui définissent le HTTPS !

Conclusion

Dès à présent vous savez installer et configurer un reverse proxy grâce à Nginx ! Après son installation, il suffit d’ajouter une configuration adaptée, de la tester et de redémarrer le service NGINX. Vous pouvez également activer le HTTPS pour renforcer la sécurité des échanges !

Nous vous remercions d'avoir suivi ce tutoriel !


Pour nous aider à nous améliorer, n'hésitez pas à faire part de vos avis en commentaires ou même à poser vos questions si vous avez besoin d'aide supplémentaire.

Vous pouvez également partager cet article et nous suivre sur Twitter/X :

x.com

ainsi que sur Instagram :

Makeinlab (@ma.in.lab) • Instagram photos and videos
20 Followers, 5 Following, 79 Posts - See Instagram photos and videos from Makeinlab (@ma.in.lab)

Lire plus