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.
Isole votre runtime applicatif (Node 3000) derrière un serveur web durci et éprouvé.
Transmet les requêtes entrantes des ports 80/443 vers le port local interne 127.0.0.1:3000.
Injecte Host, X-Real-IP et X-Forwarded-Proto pour préserver l'identité réelle du visiteur.
Sert directement les images et feuilles de style sans fatiguer la boucle événementielle Node.
# 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 nginxproxy_pass.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.
| Fonctionnalité | Nginx en Reverse Proxy | Node.js Seul en Port 80 |
|---|---|---|
| Chiffrement SSL/TLS | Optimisé 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 Slowloris | Immunisé grâce au buffering de connexions | Vulnérable à la saturation de sockets TCP |
| Redémarrage de l'Application | Page 502 propre ou page de maintenance | Connexion immédiatement refusée (ERR_CONNECTION_REFUSED) |