Guide du reverse proxy nginx
Sur cette page
Un reverse proxy se place devant vos applications et leur transmet les requêtes des visiteurs. Avec nginx en façade, une app Node.js, un conteneur Docker ou un tableau de bord qui tourne sur un port quelconque devient https://app.example.com, avec HTTPS, des en-têtes corrects et un seul endroit pour tout gérer.
Ce guide configure nginx en reverse proxy sur Ubuntu, étape par étape : le bloc server, les en-têtes, les WebSockets, le HTTPS gratuit et les erreurs que vous rencontrerez le plus probablement.
À quoi sert un reverse proxy
- Un seul point d'entrée public. nginx écoute sur les ports 80 et 443 et transmet chaque domaine ou chemin à la bonne app, si bien que les apps elles-mêmes ne sont jamais exposées à Internet.
- HTTPS au même endroit. nginx gère les certificats ; les apps derrière lui peuvent parler en HTTP simple sur localhost.
- Plusieurs apps sur un seul serveur.
app.example.com,api.example.cometexample.com/blogpeuvent chacun pointer vers un service différent. - Bonus : compression, cache, limites d'upload et règles d'accès, sans toucher à l'app.
Étape 1 : installer nginx
sudo apt update sudo apt install nginx
Ouvrez http://your-server-ip : vous devriez voir la page d'accueil de nginx. Si vous utilisez ufw, autorisez le trafic web avec sudo ufw allow 'Nginx Full'.
Vérifiez que votre app tourne et répond sur le serveur lui-même, par exemple avec curl http://127.0.0.1:3000. Si cela échoue, nginx échouera aussi.
Faites tourner nginx et vos apps avec un accès root complet : les VPS KVM HytHost démarrent à €2.92/mois.
Voir les offres VPSÉtape 2 : créer le bloc server du proxy
Sous Ubuntu, chaque site a un fichier dans /etc/nginx/sites-available/, activé par un lien dans sites-enabled. Créez /etc/nginx/sites-available/app.example.com :
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
Activez-le, testez la configuration et rechargez :
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Faites pointer l'enregistrement A du domaine vers votre serveur, et http://app.example.com affiche désormais votre app. Lancez toujours nginx -t avant de recharger : la commande repère les fautes de frappe avant qu'elles ne mettent le site hors ligne.
Les en-têtes et la barre oblique finale
Hosttransmet le domaine demandé par le visiteur. Sans lui, nginx envoie l'adresse deproxy_pass, et les apps qui construisent leurs liens à partir de l'hôte ne fonctionnent plus correctement.X-Real-IPetX-Forwarded-Fortransmettent l'adresse IP du visiteur. Sans eux, chaque requête semble venir de127.0.0.1.X-Forwarded-Protoindique à l'app si le visiteur a utilisé HTTPS, pour qu'elle ne redirige pas en boucle.
Le paquet nginx d'Ubuntu fournit ces lignes dans /etc/nginx/proxy_params, donc include proxy_params; sert de raccourci.
La barre oblique finale compte. Pour une app placée sous un chemin :
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Avec la barre oblique après le port, /app/login arrive à l'app sous la forme /login. Sans elle, l'app reçoit le chemin complet /app/login.
WebSockets
Les apps de chat, les tableaux de bord en direct et de nombreux panneaux d'administration utilisent les WebSockets, qui exigent deux en-têtes supplémentaires. Ajoutez cette map une seule fois, dans le bloc http, par exemple dans un nouveau fichier /etc/nginx/conf.d/websocket.conf :
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Puis dans la location :
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx ferme une connexion proxifiée qui n'envoie rien pendant 60 secondes ; un proxy_read_timeout plus long garde ouverts les WebSockets silencieux. proxy_http_version 1.1 n'est la valeur par défaut qu'à partir de nginx 1.29.7, et Ubuntu 24.04 fournit la 1.24 : gardez donc la ligne.
Étape 3 : HTTPS gratuit avec Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot obtient un certificat Let's Encrypt gratuit, ajoute les réglages HTTPS à votre bloc server et peut rediriger HTTP vers HTTPS. Il renouvelle le certificat automatiquement ; vérifiez-le avec sudo certbot renew --dry-run. Pour en savoir plus sur les certificats, lisez comment obtenir un certificat SSL gratuit.
Corriger les erreurs 502, 504 et 413
| Erreur | Cause habituelle | Solution |
|---|---|---|
| 502 Bad Gateway | nginx ne parvient pas à joindre l'app : elle est arrêtée, a planté ou écoute sur un autre port ou une autre adresse | Démarrez l'app, vérifiez le port avec curl http://127.0.0.1:PORT, lisez /var/log/nginx/error.log |
| 504 Gateway Timeout | L'app a mis plus de 60 secondes à répondre | Accélérez la requête ou augmentez proxy_read_timeout pour cette location |
| 413 Request Entity Too Large | Un upload dépasse la limite par défaut de nginx, 1 Mo | Définissez client_max_body_size 50m; dans le bloc server |
| Boucle de redirection | L'app ne sait pas que le visiteur a utilisé HTTPS | Transmettez X-Forwarded-Proto et indiquez à l'app qu'elle est derrière un proxy |
Après chaque modification : sudo nginx -t, puis sudo systemctl reload nginx.
L'héberger sur un VPS HytHost
Un reverse proxy a besoin d'un serveur dont vous contrôlez les ports 80 et 443. Les offres VPS HytHost tournent sur KVM avec accès root complet, stockage SSD et protection DDoS ; choisissez Ubuntu 24.04 et suivez les étapes ci-dessus. Vos apps tournent dans des conteneurs ? Installez d'abord Docker avec comment installer Docker sur Ubuntu, et liez les ports des conteneurs à 127.0.0.1 pour que seul nginx puisse les joindre.
Questions fréquentes
Un reverse proxy transmet les requêtes à une ou plusieurs apps placées derrière lui. Un load balancer est un reverse proxy qui répartit les requêtes entre plusieurs copies de la même app. nginx sait faire les deux, avec un bloc upstream qui liste les copies.
nginx ne parvient pas à joindre l'app derrière lui. Vérifiez que l'app tourne et écoute sur l'adresse et le port indiqués dans proxy_pass, et lisez /var/log/nginx/error.log pour connaître la raison exacte.
Non, si l'app tourne sur le même serveur. nginx gère le HTTPS pour les visiteurs et parle à l'app en HTTP simple sur 127.0.0.1, qui ne quitte jamais la machine.
Donnez à chaque app son propre bloc server avec son propre server_name, comme app.example.com et api.example.com, chacun avec un proxy_pass vers un port différent.
Oui. Publiez le port de chaque conteneur uniquement sur 127.0.0.1 et pointez proxy_pass dessus. Les conteneurs restent ainsi hors de l'Internet public, ce qui compte car les ports publiés par Docker contournent ufw.
Hébergez vos apps derrière nginx
Les VPS KVM HytHost avec accès root complet, stockage SSD et protection DDoS démarrent à €2.92/mois.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursCe guide vous a-t-il été utile ?