Glossaire cyber

Reverse proxy : nginx, HAProxy, Caddy, Traefik, Envoy

Comparatif 2026 des reverse proxies : nginx vs Caddy vs Traefik vs HAProxy vs Envoy, CVE confusion attack Apache 2024, HTTP/3 et hardening.

Naim Aouaichia
13 min de lecture
  • Reverse proxy
  • Nginx
  • DevOps
  • Cybersécurité
  • Infrastructure
  • DevSecOps

Un reverse proxy (proxy inverse) est le composant qui s'intercale entre Internet et tes backends pour faire TLS termination, routage HTTP, load balancing, caching, rate limiting et souvent un peu de WAF. Le marché 2026 est dominé par 5 acteurs majeurs : nginx (1.27.x, ~33% des serveurs Internet selon Netcraft mai 2025, racheté par F5 en 2019, fork freenginx par Maxim Dounin en février 2024), Caddy (v2.8, juin 2024, auto-HTTPS ACME natif, écrit en Go), Traefik (v3.2, octobre 2024, leader sur Kubernetes), HAProxy (3.0 LTS, mai 2024, référence load balancing TCP haute perf), Envoy (1.32, sous-jacent d'Istio et Contour). Apache HTTP Server (httpd 2.4.62, septembre 2024) reste massif en legacy mais à éviter sur les nouveaux projets, la « Confusion Attack » révélée par Orange Tsai (DEVCORE) à Black Hat USA août 2024 a exposé 9 CVE dont 3 RCE/auth bypass critiques (CVE-2024-38474/38476/38477). Cet article documente le comparatif technique 2026, les patterns de config sécurité, le support HTTP/3 et QUIC, les CVE marquantes, et les anti-patterns persistants.

Pour la couche au-dessus du reverse proxy : voir WAF (Web Application Firewall). Pour la primitive crypto sous-jacente : TLS (Transport Layer Security).

Le bon mental model : reverse proxy ≠ load balancer ≠ WAF ≠ API gateway

Le piège conceptuel de 2026 : tout reverse proxy moderne (Traefik, Caddy, Envoy) fait du load balancing et un peu de WAF, donc on confond les rôles. Distinction propre :

ComposantRôle primaireCouche OSIExemples
Reverse proxyRoutage HTTP, TLS termination, cachingL7nginx, Caddy, Apache, Traefik
Load balancerDistribution de charge, health checkL4 ou L7HAProxy, AWS ALB/NLB, F5 BIG-IP
WAFFiltrage attaques applicatives (OWASP)L7ModSecurity, Coraza, Cloudflare WAF
API gatewayAuth, rate limiting, versioning, monetizationL7 + métierKong, Tyk, KrakenD, Apigee
Service mesh proxymTLS, observability, retries inter-servicesL7 sidecarEnvoy, Linkerd2-proxy

Concrètement, un déploiement web typique 2026 chaîne : [Cloudflare WAF/CDN] → [HAProxy L4 LB] → [nginx reverse proxy + TLS term] → [Kong API gateway si APIs] → [backends]. Mais sur SaaS solo ou SMB : [Caddy reverse proxy + auto-HTTPS] → [backends] suffit.

Comparatif technique 2026

Critèrenginx 1.27Caddy 2.8Traefik 3.2HAProxy 3.0Envoy 1.32Apache 2.4.62
LangageCGoGoCC++C
Première release2004 (Sysoev)2015 (Holt)2016 (Containous)2001 (Tarreau)2016 (Lyft)1995 (NCSA fork)
ConcurrenceEvent-drivenGoroutinesGoroutinesMulti-threaded epollThreaded multi-processMPM event/worker/prefork
Conf statique / dynamiqueStatique + reloadCaddyfile / APIYAML + labels Docker / CRD K8sStatique + Runtime APIxDS API gRPChttpd.conf + .htaccess
Auto-HTTPS ACMEPlugin (certbot externe)NatifNatifPluginVia service meshPlugin (mod_md)
HTTP/3 QUIC1.25+ (avril 2024)Natif3.0+2.9+1.30+Pas de support natif
WAF intégréNon (ngx_security ou Coraza)PluginPlugin (Coraza)SPOA + ModSecurityRBAC ext_authzmod_security
Performances RPS (1 cœur)~50-80k~20-40k~15-30k~80-150k~40-70k~10-25k
Footprint mémoire idle~5-10 MB~30-50 MB~50-80 MB~5-10 MB~50-100 MB~20-40 MB
Use case primaireServeur web généralisteSaaS auto-HTTPSKubernetes ingressLB haute perfService mesh sidecarLegacy web
LicenceBSD-2Apache 2MITGPL v2Apache 2Apache 2

Performance brute pure (RPS) : HAProxy reste roi, suivi de nginx. Caddy et Traefik paient ~2-4x leur tribut au runtime Go (GC, goroutines), mais offrent une UX bien supérieure. Envoy paye sa flexibilité xDS.

Hardening reverse proxy : config nginx baseline 2026

# /etc/nginx/nginx.conf, baseline production 2026
user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
 
events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}
 
http {
    # Hide server version (info disclosure)
    server_tokens off;
    more_clear_headers Server;  # nginx-extras
 
    # Buffer hardening contre slowloris / oversized requests
    client_body_buffer_size 16k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 8k;
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;
 
    # Compression sécurisée (BREACH safe en HTTPS)
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
 
    # TLS Mozilla Intermediate
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
 
    # Rate limiting global
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
 
    # Logs structurés JSON (parser SIEM-friendly)
    log_format json escape=json '{'
        '"time":"$time_iso8601",'
        '"remote":"$remote_addr",'
        '"method":"$request_method",'
        '"uri":"$request_uri",'
        '"status":$status,'
        '"size":$body_bytes_sent,'
        '"rt":$request_time,'
        '"ua":"$http_user_agent",'
        '"ref":"$http_referer"'
    '}';
    access_log /var/log/nginx/access.json json;
 
    server {
        listen 443 ssl http2;
        listen 443 quic reuseport;  # HTTP/3
        listen [::]:443 ssl http2;
        listen [::]:443 quic reuseport;
        http3 on;
 
        server_name api.example.com;
 
        # Security headers (Mozilla Observatory A+)
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "DENY" always;
        add_header Referrer-Policy "strict-origin-when-cross-origin" always;
        add_header Content-Security-Policy "default-src 'self'; frame-ancestors 'none'" always;
        add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
        add_header Alt-Svc 'h3=":443"; ma=86400' always;
 
        # Rate limit + connection limit
        limit_req zone=api_limit burst=20 nodelay;
        limit_conn addr 100;
 
        # Reverse proxy vers backend
        location / {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            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;
            proxy_connect_timeout 5s;
            proxy_read_timeout 30s;
            proxy_send_timeout 30s;
            proxy_buffering on;
            proxy_buffers 8 16k;
        }
 
        # Block crawlers indésirables et exploits CVE classiques
        location ~ /\.(git|env|aws|svn|hg) { deny all; return 404; }
        location ~ \.(php|asp|aspx|jsp)$ { return 404; }  # blocage attaques shell upload
    }
}

Caddy équivalent en 15 lignes :

{
    servers {
        protocols h1 h2 h3
    }
}
 
api.example.com {
    encode zstd gzip
    header {
        Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
        Content-Security-Policy "default-src 'self'; frame-ancestors 'none'"
        -Server
    }
    rate_limit {
        zone api { key {client_ip} events 10 window 1s }
    }
    reverse_proxy backend1:8080 backend2:8080 {
        lb_policy least_conn
        health_uri /healthz
        health_interval 5s
    }
}

C'est l'équivalent fonctionnel de la config nginx ci-dessus. Différence : Caddy obtient le cert TLS automatiquement via ACME, sans une ligne de config supplémentaire.

CVE marquantes reverse proxy 2024-2025

CVEProduitCVSSDateType
CVE-2024-38474, 38475, 38476Apache httpd 2.4.0-2.4.599.8/8.1juillet 2024RewriteRule confusion attack
CVE-2024-38473, 39884Apache httpd9.0juillet 2024Auth bypass via sub-request
CVE-2024-38477Apache httpd7.5juillet 2024NULL pointer + RCE handler
CVE-2024-7347nginx mp4 module7.3août 2024Worker crash, info leak
CVE-2025-1974nginx-ingress (K8s)9.8mars 2025Configuration injection
CVE-2024-32978Pioz (modsecurity wrapper)7.5mai 2024Bypass règles WAF
CVE-2024-27316Apache httpd7.5avril 2024HTTP/2 CONTINUATION DoS
CVE-2024-32760nghttp2 (HTTP/2 lib utilisée par nginx)5.3avril 2024Memory exhaustion
CVE-2023-44487HTTP/2 Rapid Reset7.5octobre 2023DDoS L7 record 398M rps
CVE-2024-43204Caddy5.3août 2024SMTP smuggling reverse proxy
CVE-2024-9476Traefik7.5octobre 2024Path traversal via dashboard

L'événement de 2023-2024 majeur : HTTP/2 Rapid Reset (CVE-2023-44487), attaque DDoS L7 atteignant 398 millions de requêtes par seconde sur Google Cloud (record absolu d'octobre 2023), exploitant la possibilité de RST_STREAM massif en HTTP/2. Patches sur tous les reverse proxies majeurs en octobre-novembre 2023. nginx 1.25.3, HAProxy 2.8.2, Apache 2.4.58, Envoy 1.27.3 corrigés.

Confusion Attack Apache (août 2024) : Orange Tsai a démontré à DEFCON 32 et Black Hat USA 2024 que la chaîne RewriteRule + AddHandler + AliasMatch + sub-request permet 9 classes distinctes de bugs structurels, auth bypass d'admin panels, SSRF vers métadonnées cloud, RCE via filename confusion. La présentation est devenue un classique du red team web.

Patterns de déploiement par contexte

ContexteStack reverse proxy recommandéeJustification
SaaS solo / SMB ≤ 50k req/jourCaddy 2.8 + Cloudflare devantAuto-HTTPS, config minimale, gratuit
E-commerce Magento/WooCommercenginx + Cloudflare + ModSecurity CorazaCache statique fort, WAF natif Cloudflare
API publique 1-10M req/journginx ou HAProxy + Kong API gatewayRate limit per consumer, monitoring fin
Kubernetes ingress devTraefik 3 + cert-managerDiscovery dynamique, IngressRoute CRD
Kubernetes ingress prodnginx-ingress ou Contour (Envoy)Maturité, tooling debug
Plateforme bancaire haute chargeHAProxy 3.0 LTS + ModSecurityPerf maxi, support entreprise
Service mesh interneIstio (Envoy) ou Linkerd (linkerd2-proxy)mTLS auto, observability
Edge global multi-régionCloudflare ou Fastly + nginx originDDoS, anycast, cache global
Legacy WordPressApache 2.4.62 + ModSecurity v3Compat .htaccess, mod_php

Erreurs fréquentes en exploitation reverse proxy

ErreurSymptômeFix
proxy_pass sans Host header forwardé404 backend, virtual hosting casséproxy_set_header Host $host;
X-Forwarded-For accepté de tout clientIP spoofing, log empoisonnéset_real_ip_from whitelist + real_ip_header
ssl_protocols TLSv1 actifSurface attaque legacyssl_protocols TLSv1.2 TLSv1.3;
client_max_body_size 0 ou trop grandDoS upload, buffer overflowLimite à 10-50 MB selon use case
server_tokens on (défaut)Disclosure version exploitableserver_tokens off;
Pas de rate limit sur login/authCredential stuffing facilelimit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
Headers de sécurité absents (CSP, HSTS, XCTO)Score Mozilla Observatory Fadd_header baseline ci-dessus
Logs en plain text non centralisésForensic post-incident impossibleJSON logs + forwarding SIEM
Pas de proxy_buffering activéLatence backend exposéeproxy_buffering on; + proxy_buffers
try_files $uri /index.php?$args sans validationLFI / SSRF si app vulnérableValidation param + WAF
Health check absent backend poolRibbon de 502 lors d'un crash backendhealth_check ou backup directive
Pas d'auto-renew certificate cronOutage TLS minuit T-0Caddy auto, ou certbot --renew systemd timer
Headers de cache trop permissifs sur APIData privacy leak via cache CDNCache-Control: private, no-store sur réponses sensibles

Mapping framework : reverse proxy dans les référentiels sécu

FrameworkRéférenceExigence reverse proxy
OWASP ASVS v4.0V14 ConfigurationServer hardening, headers sécurité
OWASP Top 10A05:2021 Security MisconfigurationConfig par défaut sécurisée
CIS Benchmarks Apache/nginxv2.x80+ contrôles config par produit
NIST SP 800-95Web Service SecurityTLS, rate limit, WAF
ANSSI Sécurisation webv1.2Headers HSTS, CSP, X-Frame-Options
PCI DSS v4.06.4.1, 6.4.2WAF obligatoire devant apps PCI
MITRE ATT&CKT1190 Exploit Public-FacingPatch reverse proxy = mitigation
ISO/IEC 27002:2022Contrôle 8.20, 8.23Sécurité réseau et applicative

Pour aller plus loin

Points clés à retenir

  • Marché 2026 dominé par 5 reverse proxies : nginx (~33% Internet selon Netcraft mai 2025), Caddy 2.8, Traefik 3.2, HAProxy 3.0 LTS, Envoy 1.32. Apache 2.4.62 reste massif en legacy mais à éviter en greenfield.
  • Confusion Attack Apache (Orange Tsai, Black Hat USA août 2024) : 9 CVE structurelles (CVE-2024-38473 à 38477), patch obligatoire ≥ 2.4.60.
  • HTTP/2 Rapid Reset (CVE-2023-44487, octobre 2023) : DDoS record 398M req/s sur Google Cloud, patch obligatoire sur tous les reverse proxies HTTP/2.
  • HTTP/3 (RFC 9114) sur QUIC (RFC 9000) supporté natif depuis 2023-2024 sur tous les majeurs : nginx 1.25+, Caddy 2.x, HAProxy 2.9+, Traefik 3+, Envoy 1.30+.
  • Caddy gagne sur l'auto-HTTPS ACME (RFC 8555) intégré : aucun cron certbot, aucune config TLS manuelle, OCSP stapling par défaut.
  • Performance brute (RPS 1 cœur) : HAProxy ~80-150k > nginx ~50-80k > Envoy ~40-70k > Caddy ~20-40k > Traefik ~15-30k > Apache ~10-25k.
  • Stack baseline 2026 SaaS solo : Caddy + Cloudflare devant. Stack enterprise haute charge : HAProxy + nginx + Cloudflare + Kong API gateway.
  • Headers sécurité minimum : HSTS (max-age 2 ans + preload), CSP, X-Content-Type-Options, X-Frame-Options DENY, Referrer-Policy strict-origin. Cible : grade A+ Mozilla Observatory.
  • Rate limiting par IP minimum : 10-30 req/s sur API publique, 5 req/min sur login/auth. Au-delà, basculer sur API gateway (Kong, Tyk).
  • Logs JSON structurés pour SIEM-readiness : log_format json ou Caddy log JSON natif. Plain text deprecated en 2026.
  • Position : ne plus démarrer de nouveau projet sur Apache HTTP Server. Garder Apache uniquement pour legacy .htaccess / mod_php / cPanel.
  • Reverse proxy = L7 routage / TLS / cache. API gateway = + auth + rate limit per consumer + versioning. Service mesh proxy = + mTLS + observability sidecar.

Questions fréquentes

  • Nginx, Caddy, Traefik ou HAProxy : lequel choisir en 2026 ?
    Nginx (1.27.x en mai 2026) reste le plus déployé : ~33% des serveurs web Internet selon Netcraft mai 2025, performant, doc massive. Caddy (v2.8, juin 2024) si tu veux auto-HTTPS via ACME natif et config Caddyfile minimaliste, idéal SaaS solo / SMB. Traefik (v3.2, octobre 2024) pour Kubernetes et discovery dynamique (labels Docker, Ingress, CRD). HAProxy (3.0 LTS, mai 2024) pour load balancing TCP/HTTP haute perf et protocoles non-HTTP. Envoy (1.32, 2024) sous le capot d'Istio, Contour, Gloo, tu en fais rarement de la config directe. Position : ne plus démarrer de nouveaux projets sur Apache HTTP Server en 2026, sauf legacy.
  • Reverse proxy ou API gateway : où est la frontière en 2026 ?
    Le reverse proxy fait du routage couche 7 + TLS termination + load balancing + caching. L'API gateway ajoute auth (OAuth2, JWT, mTLS), rate limiting par consumer, transformation de payload, observability (OpenTelemetry), portail développeur. Concrètement : nginx ou HAProxy = reverse proxy. Kong (v3.7, juin 2024), Tyk, KrakenD, Apigee, AWS API Gateway = API gateway. Traefik et Envoy se positionnent entre les deux selon la config. Choix simple : si tu n'as pas besoin de quotas par client/clé API ni de versioning d'API, le reverse proxy suffit. Au-delà, l'API gateway.
  • L'attaque "confusion attack" (CVE-2024-38476/38477) sur Apache, c'est quoi exactement ?
    Découvert par Orange Tsai (DEVCORE) à Black Hat USA août 2024, la "Confusion Attack" exploite l'architecture modules d'Apache HTTP Server. Trois familles : RewriteRule + filename confusion (CVE-2024-38474/75/76 CVSS 8.1-9.8), authentification + sub-request confusion (CVE-2024-38473 + CVE-2024-39884), handler confusion (CVE-2024-38477 RCE possible). Impact : SSRF, auth bypass, RCE selon config. Patches dans Apache HTTPD 2.4.60+ (juillet 2024), 2.4.62 recommandé. Tout déploiement Apache < 2.4.60 en 2026 = exposition critique. Argument supplémentaire pour migrer vers nginx ou Caddy sur les nouveaux projets.
  • Caddy auto-HTTPS via Let's Encrypt, c'est vraiment magique ou il y a un piège ?
    C'est aussi simple que ça en a l'air. Caddy fait ACME (RFC 8555) au démarrage, obtient un cert Let's Encrypt ou ZeroSSL, le renouvelle 30 jours avant expiration, avec OCSP stapling activé par défaut. Pour 1-1000 domaines, pas de cron à configurer. Pièges : 1) si tu hits le rate limit Let's Encrypt (50 certs/semaine/domaine racine en mai 2026), bloque-toi 7 jours ; 2) en cluster, configure Redis/Consul comme storage backend partagé sinon chaque node demande son cert ; 3) la rotation auto à 47 jours (CA/Browser Forum 2027) sera transparente côté Caddy mais cassera des deploys qui ont fait du pinning manuel. Solution opérationnelle solide pour SaaS jusqu'à 100k domaines.
  • HTTP/3 et QUIC en reverse proxy : prêt pour la prod en 2026 ?
    Oui. HTTP/3 (RFC 9114, juin 2022, basé QUIC RFC 9000) est servi par Cloudflare, Google, Meta, AWS CloudFront depuis 2022-2023. Côté reverse proxy : nginx 1.25+ supporte HTTP/3 natif (avril 2024), Caddy nativement, HAProxy 2.9+ (décembre 2023), Traefik 3+ (avril 2024), Envoy 1.30+. Bénéfices : réduction latence handshake (1 RTT vs 2-3), connexion migration mobile, multiplexing sans head-of-line blocking. Limites : consommation CPU 30-40% supérieure à HTTP/2, certains middleboxes corporate bloquent UDP 443. Activation recommandée sur edge public 2026, à fallback HTTP/2 si UDP filtré.

Écrit par

Naim Aouaichia

Cyber Security Engineer et fondateur de Zeroday Cyber Academy

Ingénieur cybersécurité avec un parcours hybride : développement, DevOps Capgemini, DevSecOps IN Groupe (sécurité des documents d'identité régaliens), audits CAC 40. Fondateur de Hash24Security et Zeroday Cyber Academy. Présence LinkedIn 43 000 abonnés, Substack Zeroday Notes 23 000 abonnés.