Aller au contenu
medium

Reverse proxy : définition, rôle et quel outil choisir

16 min de lecture

Un reverse proxy (ou proxy inverse) est un serveur intermédiaire placé devant vos serveurs applicatifs : il reçoit les requêtes des clients, les transmet au bon backend, puis renvoie la réponse. Le client ne parle jamais directement à vos serveurs, il ne connaît que le proxy. C'est le portier de votre infrastructure, qui centralise le TLS, le routage, la répartition de charge et la sécurité.

Ce guide donne la définition complète, distingue le reverse proxy du proxy classique et du load balancer, puis vous aide à choisir l'outil (HAProxy, Traefik, Nginx, Caddy, Apache, ou un reverse proxy tunnelisé) selon votre contexte. Public : débutants et intermédiaires qui administrent une infrastructure web.

Les 3 bénéfices immédiats :

  1. Vos serveurs sont cachés : les utilisateurs ne connaissent que l'adresse du proxy, jamais celle des backends.
  2. Un seul point de configuration : certificats TLS, règles de sécurité et logs sont centralisés au même endroit.
  3. Haute disponibilité : si un serveur tombe, le proxy redirige automatiquement vers les autres.

Le mot proxy seul désigne en général un forward proxy, qui agit pour le compte des clients : il sort du réseau vers Internet (filtrage web, cache de navigation, anonymisation). Le reverse proxy fait l'inverse, il agit pour le compte des serveurs et reçoit le trafic entrant.

Proxy (forward)Reverse proxy (proxy inverse)
Agit pourles clients (sortie)les serveurs (entrée)
Cachequi accède à Internetquels serveurs répondent
Cas d'usagefiltrage, cache navigationTLS, routage, load balancing, WAF

Retenez la règle simple : un forward proxy protège et cache les utilisateurs, un reverse proxy protège et cache les serveurs.

Quand un utilisateur tape https://app.example.com dans son navigateur, le reverse proxy orchestre tout le parcours avant que la requête n'atteigne votre application.

Trajet d'une requête : Client vers Reverse Proxy (TLS, règles, load balancing) vers Backend, puis réponse

Étape par étape :

  1. Le client appelle https://app.example.com.
  2. Le reverse proxy termine le TLS (déchiffre la connexion HTTPS).
  3. Il choisit un backend selon ses règles (load balancing + health checks).
  4. Il transmet la requête au backend sélectionné.
  5. Le backend traite et renvoie la réponse.
  6. Le proxy renvoie la réponse au client.

Imaginons un site avec trois composants. Le reverse proxy lit l'URL et envoie chaque requête vers le bon serveur :

RequêteOù ça vaPourquoi
GET /api/usersBackend API (Node.js)Logique métier
GET /Frontend (React/Vue)Interface utilisateur
GET /static/logo.pngServeur de fichiers ou cachePerformance

Sans reverse proxy, il faudrait trois domaines différents ou tout empiler sur un seul serveur.

Un reverse proxy est un portier qui effectue cinq actions, quel que soit l'outil choisi :

  1. Termine le HTTPS : il déchiffre les connexions TLS. Vos backends peuvent tourner en HTTP simple, plus facile à gérer.

  2. Route les requêtes : selon le chemin (/api), le domaine (api.example.com) ou un header, il envoie vers le bon backend.

  3. Répartit la charge : il distribue les requêtes entre plusieurs serveurs (round-robin, moins de connexions, etc.).

  4. Vérifie la santé : il teste régulièrement chaque backend. Un serveur qui ne répond plus est retiré automatiquement.

  5. Protège l'accès : rate limiting, blocage d'IP, validation de headers. C'est votre première ligne de défense.

Reverse proxy ou load balancer : quelle différence ?

Section intitulée « Reverse proxy ou load balancer : quelle différence ? »

Ces deux termes sont souvent confondus. Un reverse proxy est un point d'entrée HTTP(S) qui fait du TLS, du routage et de la sécurité. Un load balancer répartit le trafic entre plusieurs serveurs, au niveau transport (L4) ou applicatif (L7).

ConceptCe qu'il faitExemples
Reverse proxyPoint d'entrée HTTP(S) : TLS, routage, headers, sécuritéNginx, Traefik, Apache
Load balancerRépartit le trafic entre serveurs (L4 ou L7)HAProxy, AWS ALB, F5

En pratique, la plupart des outils font les deux. HAProxy est un excellent load balancer qui fait aussi reverse proxy. Nginx est un serveur web, un reverse proxy et un load balancer. Traefik combine tout dans un contexte cloud-native.

Ces outils n'appartiennent pas à la même catégorie. Comprendre leur famille évite de croire qu'ils font tous la même chose :

FamilleOutilsSpécialité
Load balancer L4/L7HAProxyRépartition de charge, haute dispo, checks avancés
Edge proxy cloud-nativeTraefikDécouverte de services, config dynamique, conteneurs
Serveur web + reverse proxyNginx, Apache, CaddyServir du contenu statique + proxy vers backends
Reverse proxy tunnelisé / zero-trustPangolin, cloudflaredPublier un service sans ouvrir de port, identité au bord
WAF / reverse proxy filtrantBunkerWebPare-feu applicatif intégré au proxy
Data-plane / service meshEnvoyProxy L7 à grande échelle (via Istio)

Une nouvelle génération d'outils publie un service sans ouvrir aucun port entrant sur votre pare-feu. Un connecteur ouvre un tunnel sortant vers un point d'entrée public, et le trafic redescend par ce tunnel. C'est idéal pour un homelab derrière une box ou un réseau sans IP publique. Pangolin est l'option auto-hébergée et souveraine, cloudflared l'option managée par Cloudflare. Ces outils sont à double tranchant : la même mécanique sert aussi les attaquants, à surveiller.

Répondez à ces questions dans l'ordre. Dès que vous avez un « oui », vous avez votre outil :

QuestionSi oui →
1. Kubernetes ou Docker avec découverte auto ?Traefik, config dynamique par labels/annotations
2. Load balancing L4/L7 critique + health checks avancés ?HAProxy, conçu pour ça, très stable
3. Servir du web + cache + reverse proxy classique ?Nginx, le standard, cache intégré
4. HTTPS auto + configuration minimaliste ?Caddy, Let's Encrypt natif
5. Exposer un service sans ouvrir de port (homelab) ?Pangolin ou cloudflared
Vous exposez un service sans IP publique / sans ouvrir de port ?
├── Oui → Pangolin (auto-hébergé) ou cloudflared (managé)
└── Non → Suite...
└── Votre infrastructure utilise Kubernetes ?
├── Oui → Traefik (IngressRoute) ou Nginx Ingress
└── Non → Suite...
└── Docker avec déploiements fréquents ?
├── Oui → Traefik (découverte automatique)
└── Non → Suite...
└── Load balancing L4/L7 avancé ?
├── Oui → HAProxy (health checks, runtime API)
└── Non → Nginx (web + cache) ou Caddy (HTTPS auto)

Ce tableau compare les modèles d'exploitation, pas les performances brutes (suffisantes pour la majorité des charges) :

CritèreHAProxyTraefikNginxApacheCaddy
ModèleLB + proxy L4/L7Edge proxy cloud-nativeServeur web + proxyServeur webServeur web moderne
ConfigurationFichier + runtime APIDynamique (providers)FichierFichierCaddyfile
Découverte de servicesNonDocker, K8s, ConsulNonNonNon
TLS / ACMEÀ intégrerIntégréÀ intégrerÀ intégrerIntégré
Cache webPas l'objectifLimité (plugins)FortCorrectLimité
L4 (TCP/UDP)ExcellentBonBonLimitéLimité
Quand le choisirAPI critiques, LBConteneurs, K8sWeb + cacheLegacy, modulesSimplicité

Les deux comparaisons les plus recherchées se résument ainsi. Traefik contre Nginx : Traefik gagne dès qu'il y a des conteneurs (découverte et config dynamique), Nginx reste devant pour servir du contenu web et gérer un cache performant. HAProxy contre Nginx : HAProxy est le meilleur load balancer (health checks fins, runtime API), Nginx est plus polyvalent (web + proxy + cache).

Besoin : servir du contenu avec cache, gérer Let's Encrypt, configuration simple. Solutions : Nginx (standard, cache intégré) ou Caddy (HTTPS automatique, idéal pour débuter).

Besoin : haute disponibilité, health checks précis, latence minimale, sessions persistantes. Solution : HAProxy, conçu pour ça et ayant fait l'objet d'un audit de sécurité commandé par l'ANSSI.

Besoin : découverte automatique des conteneurs, configuration par labels, déploiements fréquents. Solution : Traefik, avec sa configuration Docker par labels.

Besoin : Ingress Controller, intégration native, gestion des namespaces. Solution : Traefik comme Ingress Controller (Gateway API, IngressRoute) ou Nginx Ingress.

Besoin : publier une application depuis un réseau derrière une box, sans ouvrir de port. Solution : Pangolin en auto-hébergé, ou cloudflared en managé.

1. Single Point of Failure. Votre reverse proxy devient critique. Prévoyez un second proxy en failover (keepalived, VRRP) ou un load balancer cloud devant vos proxies.

2. Headers X-Forwarded oubliés. Vos backends voient l'IP du proxy, pas celle du client. Configurez X-Forwarded-For (IP réelle) et X-Forwarded-Proto (schéma http/https).

3. Timeouts mal réglés. Un timeout trop court provoque des erreurs 504, trop long bloque les connexions. Règle : timeout proxy > timeout backend.

4. Buffers insuffisants. Les gros uploads échouent si les buffers sont trop petits. Surveillez les erreurs 413 et 502.

5. Host header non validé. Sans liste blanche, un attaquant peut manipuler le header Host. Validez toujours les hôtes autorisés.

Ces deux codes viennent presque toujours du reverse proxy, pas du client. Une 502 Bad Gateway signifie que le backend a renvoyé une réponse invalide ou a fermé la connexion : backend planté, mauvais port, TLS mal négocié. Une 504 Gateway Timeout signifie que le backend n'a pas répondu à temps : traitement trop long ou timeout proxy trop court. Le réflexe : vérifier que le backend répond directement, puis ajuster les timeouts et les buffers.

Voici une architecture de production classique combinant load balancer cloud, HAProxy en actif/passif et Traefik pour la partie Kubernetes :

Architecture reverse proxy production : Internet, Load Balancer Cloud, HAProxy Primary/Standby et Traefik K8s, backends VM et Pods

Traefik est l'outil le plus adapté aux conteneurs et concentre la majeure partie du sous-jacent de cette section. Le parcours complet couvre l'installation, la configuration Docker et Kubernetes, les certificats, les middlewares, la sécurité et l'observabilité :

Un reverse proxy est un serveur qui reçoit les requêtes des clients à la place de vos serveurs applicatifs, puis les transmet au bon backend et renvoie la réponse. Il centralise le TLS, le routage et la sécurité.

À cacher et protéger vos serveurs derrière un point d'entrée unique, terminer le HTTPS, répartir la charge entre plusieurs backends, et appliquer des règles de sécurité (rate limiting, filtrage) au même endroit.

Il n'y a pas de gagnant universel. Traefik pour les conteneurs et Kubernetes, HAProxy pour le load balancing critique, Nginx pour le web et le cache, Caddy pour la simplicité et le HTTPS automatique. Tous sont open source.

Le proxy termine le TLS avec un certificat, souvent obtenu automatiquement via Let's Encrypt (ACME). Traefik et Caddy le font nativement ; Nginx, Apache et HAProxy demandent une intégration (certbot ou équivalent).

Peut-on faire un reverse proxy sans ouvrir de port ?

Section intitulée « Peut-on faire un reverse proxy sans ouvrir de port ? »

Oui, avec un reverse proxy tunnelisé comme Pangolin ou cloudflared : un connecteur ouvre un tunnel sortant et le trafic redescend, sans exposer de port entrant sur votre réseau.

  1. Un reverse proxy est le point d'entrée unique de votre infrastructure : TLS, routage et sécurité centralisés.

  2. Proxy et reverse proxy sont opposés : le premier agit pour les clients, le second pour les serveurs.

  3. Il fait 5 choses : termine le TLS, route, répartit, vérifie la santé, protège.

  4. Choisissez selon votre écosystème : Traefik pour conteneurs, HAProxy pour LB critique, Nginx pour web + cache, Caddy pour la simplicité, Pangolin/cloudflared pour un homelab sans port ouvert.

  5. Prévoyez la haute disponibilité du proxy lui-même : il devient votre nouveau point de défaillance unique.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn