Déploiement
Déploiement • Chapitre 11 : Configuration du serveur et mise en production

Configuration de Nginx comme reverse proxy

Nginx est la porte d'entrée universelle de votre serveur. Comprenez pourquoi une API Node.js ou Python ne doit jamais écouter directement sur internet et comment Nginx la protège en agissant comme bouclier et répartiteur.

🛡️
Bouclier Protecteur

Isole votre runtime applicatif (Node 3000) derrière un serveur web durci et éprouvé.

🔄
proxy_pass Interne

Transmet les requêtes entrantes des ports 80/443 vers le port local interne 127.0.0.1:3000.

📨
En-têtes Transférés

Injecte Host, X-Real-IP et X-Forwarded-Proto pour préserver l'identité réelle du visiteur.

⚡
Mise en Cache Statique

Sert directement les images et feuilles de style sans fatiguer la boucle événementielle Node.

/etc/nginx/sites-available/mon-api.conf
# Configuration complète d'un bloc Reverse Proxy Nginx :
server {
    listen 80;
    server_name api.learnweb.com;

    # Logs dédiés à cette API
    access_log /var/log/nginx/api-access.log;
    error_log /var/log/nginx/api-error.log;

    location / {
        # 1. Rediriger le trafic vers l'instance Node.js locale
        proxy_pass http://127.0.0.1:3000;

        # 2. Protocole HTTP 1.1 pour supporter les connexions persistantes (Keep-Alive)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';

        # 3. Transférer l'adresse IP et le protocole d'origine
        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;

        # 4. Timeouts de protection contre les requêtes lentes
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
    }
}
# Tester la syntaxe : $ sudo nginx -t
# Recharger : $ sudo systemctl reload nginx

Guide Approfondi & Architecture Système

1. L'Analogie du Maître d'Hôtel et du Cuisinier

Pour comprendre l'indispensable duo Nginx + Node.js :
  • Votre API Node.js (Le Cuisinier) : Il sait préparer d'excellents plats (exécuter la logique métier, requêter la BDD). Mais si 500 clients lui crient dessus en même temps dans la cuisine, il est débordé et brûle tout.
  • Nginx (Le Maître d'Hôtel) : Il se tient à l'entrée de la salle sur les ports 80 et 443. Il accueille les clients avec politesse, vérifie leur certificat de réservation (SSL), met leurs manteaux au vestiaire (compression Gzip) et apporte les commandes calmement une par une au chef en cuisine via proxy_pass.

2. Pourquoi Transmettre X-Forwarded-For ?

Sans la directive proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; :

Votre code Express ou Laravel croirait que 100% de vos visiteurs possèdent l'adresse IP 127.0.0.1 ! Vos mécanismes de géolocalisation, vos logs de sécurité et vos limites de débit (Rate Limiting) seraient totalement faussés.

Tableau Comparatif : Nginx vs Accès Direct Node.js sur Internet

FonctionnalitéNginx en Reverse ProxyNode.js Seul en Port 80
Chiffrement SSL/TLSOptimisé en C (OpenSSL, TLS 1.3 matériel)Plus lourd en mémoire, bloque la boucle JS
Fichiers Statiques (Images/CSS)Servis à vitesse mémoire (sendfile zéro copie)Monopolise le thread JavaScript pour du transfert binaire
Résistance aux Attaques SlowlorisImmunisé grâce au buffering de connexionsVulnérable à la saturation de sockets TCP
Redémarrage de l'ApplicationPage 502 propre ou page de maintenanceConnexion immédiatement refusée (ERR_CONNECTION_REFUSED)