How-To Guides

Maîtriser Nginx : Guide complet pour configurer un proxy inverse

Dans le paysage actuel de l'architecture web, servir du contenu statique et gérer des requêtes à fort trafic directement depuis votre serveur d'application est souvent inefficace et risqué. Voici Nginx (prononcé « engine-x »), un serveur HTTP léger et haute performance ainsi qu'un proxy inverse capable de gérer des dizaines de milliers de connexions simultanées avec une empreinte mémoire minimale. Configurer Nginx comme proxy inverse est une compétence fondamentale pour tout administrateur système ou développeur backend souhaitant renforcer la sécurité, améliorer les performances et simplifier le terminaison SSL.

Ce guide vous accompagnera tout au long du processus de configuration de Nginx comme proxy inverse, en couvrant la configuration de base, l'intégration SSL et les stratégies d'équilibrage de charge.

Comprendre le concept de proxy inverse

Un proxy inverse se situe entre les clients et les serveurs backend. Lorsqu'un client demande une ressource, le proxy inverse intercepte la requête et la transmet au serveur backend approprié. Le client perçoit la réponse comme provenant directement du proxy, masquant ainsi la structure interne de votre réseau. Cette configuration offre plusieurs avantages critiques :

  • Sécurité : Il agit comme une zone tampon, protégeant les serveurs backend d'une exposition directe à Internet.
  • Performance : Nginx peut gérer les actifs statiques, le déchargement SSL et la compression, réduisant ainsi la charge sur vos serveurs d'application.
  • Évolutivité : Il permet l'équilibrage de charge entre plusieurs instances backend.

Prérequis

Avant de vous plonger dans la configuration, assurez-vous d'avoir les éléments suivants :

  1. Un serveur exécutant une distribution Linux (des exemples Ubuntu ou CentOS sont fournis ci-dessous).
  2. Nginx installé et en cours d'exécution.
  3. Une application backend fonctionnant sur un port local (par exemple, localhost:3000 pour une application Node.js ou localhost:8080 pour une application Java Spring Boot).
  4. Un nom de domaine pointant vers l'adresse IP de votre serveur.

Configuration de base du proxy inverse

Le cœur de la configuration d'un proxy inverse Nginx réside dans la directive proxy_pass. Supposons que vous ayez une application Node.js fonctionnant sur le port 3000. Voici comment configurer Nginx pour rediriger toutes les requêtes HTTP vers cette application.

Modifiez votre fichier de configuration du bloc serveur Nginx, généralement situé dans /etc/nginx/sites-available/votre_domaine ou /etc/nginx/conf.d/default.conf.

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        # Rediriger la requête vers l'application Node.js
        proxy_pass http://localhost:3000;
        
        # En-têtes requis pour un proxy correct
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        
        # Contrôle du cache (optionnel)
        proxy_cache_bypass $http_upgrade;
    }
}

Explication des directives clés :

  • proxy_pass : Spécifie l'URL du serveur backend.
  • proxy_set_header Host : Transmet l'en-tête Host original au backend, garantissant le bon fonctionnement des hôtes virtuels.
  • proxy_set_header X-Real-IP : Transmet l'adresse IP réelle du client au serveur backend.
  • proxy_http_version : Met à niveau vers HTTP/1.1, ce qui est requis pour des fonctionnalités comme WebSockets.

Ajout de SSL avec Let's Encrypt

Dans l'environnement web actuel, HTTPS est obligatoire. En utilisant certbot, vous pouvez facilement obtenir et configurer des certificats SSL pour votre proxy inverse Nginx.

sudo certbot --nginx -d example.com -d www.example.com

Certbot modifiera automatiquement votre configuration Nginx pour écouter sur le port 443 et rediriger le trafic HTTP vers HTTPS. La configuration résultante ressemblera au bloc de base mais avec les certificats SSL et les en-têtes HSTS activés.

Équilibrage de charge sur plusieurs backends

L'une des fonctionnalités les plus puissantes de Nginx est sa capacité à distribuer le trafic entre plusieurs serveurs. Pour y parvenir, définissez un bloc upstream dans votre fichier de configuration principal de Nginx (/etc/nginx/nginx.conf).

upstream my_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://my_app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

En pointant proxy_pass vers le groupe my_app upstream, Nginx utilisera son algorithme par défaut de type round-robin pour distribuer uniformément les requêtes entrantes entre les trois instances backend.

Conclusion

Configurer Nginx comme proxy inverse est une étape puissante vers la construction d'une infrastructure web robuste, sécurisée et évolutive. En déchargeant la terminaison SSL, en gérant les fichiers statiques et en équilibrant la charge entre les services backend, Nginx permet à la logique de votre application de se concentrer sur ce qu'elle fait le mieux : servir la logique métier. N'oubliez pas de toujours tester votre configuration avec nginx -t avant de recharger le service pour garantir une absence de temps d'arrêt. Maîtriser ces patterns améliorera considérablement vos capacités en DevOps et en développement backend.

Share: