Configuration d’un reverse proxy

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à configurer Nginx comme reverse proxy.

Imaginez un reverse proxy comme l’accueil d’une grande entreprise. Lorsque vous appelez le numéro principal, vous ne parlez pas directement au PDG ni à l’équipe d’assistance. Vous parlez à la personne de l’accueil, qui vous demande « Comment puis-je vous aider ? », puis transfère votre appel à la bonne personne.

Dans ce scénario :

  • Nginx est la personne de l’accueil (à l’écoute sur le port 80).
  • L’application Python est l’« équipe d’assistance » (à l’écoute sur le port 8000).
  • Vous êtes le client qui appelle.

Vous allez configurer Nginx pour que, lorsqu’une personne demande /app, Nginx transfère la requête à un serveur Python et renvoie la réponse au client.

Les reverse proxies jouent un rôle central dans l’architecture web moderne. Ils se placent devant les serveurs d’application afin de fournir un point d’entrée public stable. Ils peuvent également gérer la terminaison TLS, l’équilibrage de charge, la mise en cache et le routage des requêtes.

Nginx ne sert donc pas toujours lui-même les fichiers. Parfois, son rôle principal consiste à recevoir le trafic des clients et à le transmettre à un autre service situé derrière lui.

Démarrer une application backend

Nous devons d’abord disposer d’un service auquel transmettre les requêtes. Nous allons créer une application web très simple avec Python.

Nous allons créer un dossier spécifique à partir duquel notre application servira les fichiers.

Créez un dossier nommé app dans votre répertoire de projet, puis créez-y un fichier HTML simple :

mkdir -p ~/project/app
echo "Hello from the Python Backend." > ~/project/app/index.html

Démarrons maintenant le serveur Python. Cette commande demande à Python de fonctionner comme un serveur web et de servir les fichiers du répertoire courant sur le port 8000.

Dans notre exemple, ce processus Python est le serveur d’application backend. Il génère le contenu demandé, tandis que Nginx se place devant lui comme point d’entrée accessible publiquement.

Nous ajoutons le symbole & à la fin de la commande pour l’exécuter en arrière-plan. Vous pouvez ainsi continuer à utiliser votre terminal pendant que le serveur s’exécute silencieusement.

cd ~/project
python3 -m http.server 8000 &

Vérifions que le serveur a démarré correctement. Nous allons rechercher un processus à l’écoute sur le port 8000 :

netstat -tuln | grep 8000

La sortie doit contenir 0.0.0.0:8000 avec l’état (LISTEN). Cela signifie que notre « application backend » est prête à recevoir des requêtes sur le port 8000.

Configurer le reverse proxy Nginx

Dans cette étape, vous allez modifier le fichier de configuration de Nginx pour lui indiquer où se trouve notre application Python.

Nous devons modifier le fichier de configuration par défaut avec sudo et l’éditeur de texte nano.

sudo nano /etc/nginx/sites-enabled/default

Faites défiler le contenu du bloc server { ... }. Vous y trouverez un bloc location / { ... } existant. Nous devons ajouter un nouveau bloc location /app en dessous.

Ajoutez le code suivant dans le fichier. Faites attention aux accolades { } et au point-virgule ; :

    location /app {
        proxy_pass http://127.0.0.1:8000;
    }

Quel est l’effet de ce code ?

  • location /app : indique à Nginx de surveiller les requêtes dont le chemin commence par /app.
  • proxy_pass ... : joue le rôle du bouton de transfert d’appel. Cette directive indique à Nginx : « Lorsqu’une requête concerne /app, transférez-la vers localhost (127.0.0.1) sur le port 8000. »

Ce transfert constitue le principe même d’un reverse proxy. Le client communique avec Nginx, mais Nginx devient un client du serveur backend au nom de l’utilisateur.

La structure de votre fichier doit ressembler à ceci :

server {
    listen 80 default_server;
    ...
    location / {
        try_files $uri $uri/ =404;
    }

    location /app {
        proxy_pass http://127.0.0.1:8000;
    }
}

Appuyez sur Ctrl+O, puis sur Enter pour enregistrer le fichier. Appuyez ensuite sur Ctrl+X pour quitter nano.

Vérifier et recharger la configuration

Nous avons modifié le fichier de configuration, mais Nginx utilise encore les anciennes règles. Nous devons recharger le service.

Commencez par toujours tester la configuration pour détecter les fautes de syntaxe avant de la recharger. Si vous rechargez une configuration incorrecte, le serveur web peut cesser complètement de fonctionner.

Exécutez la commande de test :

sudo nginx -t

Vous devez voir les messages suivants : syntax is ok test is successful

Si le test réussit, rechargez Nginx pour appliquer vos modifications :

sudo service nginx reload

Nginx a maintenant mis à jour ses instructions et est prêt à transférer les requêtes.

À ce stade, Nginx agit comme un routeur entre les URL et les services backend, et non plus uniquement comme un serveur de fichiers qui lit des données sur le disque.

Tester le proxy

Dans cette dernière étape, nous allons vérifier que notre « personne de l’accueil » fait correctement son travail.

Nous allons envoyer une requête web à Nginx (port 80) pour demander /app/. Nginx doit immédiatement la transférer au serveur Python (port 8000).

Exécutez la commande suivante :

curl http://localhost/app/

Vous devez voir le message envoyé par notre serveur backend :

Hello from the Python Backend.

Que s’est-il passé ?

  1. Vous avez demandé à Nginx (localhost:80) la ressource /app/.
  2. Nginx a vérifié ses règles, trouvé une correspondance avec /app et suivi l’instruction proxy_pass.
  3. Nginx a appelé le serveur Python sur le port 8000.
  4. Le serveur Python a renvoyé la page « Hello... » à Nginx.
  5. Nginx a renvoyé la page « Hello... » à vous.

Cette chaîne de requêtes mérite d’être retenue, car elle apparaît partout dans les infrastructures modernes : navigateur -> reverse proxy -> serveur d’application -> reverse proxy -> navigateur.

Vous avez configuré un reverse proxy avec succès !

Résumé

Dans ce laboratoire, vous avez configuré Nginx comme reverse proxy avec succès. Vous avez appris à :

  1. Héberger une application backend simple avec Python.
  2. Configurer Nginx avec un bloc location pour le routage.
  3. Transférer le trafic à l’aide de la directive proxy_pass.
  4. Vérifier la chaîne du proxy avec curl.

Cette architecture constitue la base des applications web modernes. Elle vous permet d’utiliser Nginx pour la sécurité et l’équilibrage de charge, tandis que d’autres applications prennent en charge la logique en arrière-plan.