Caddy est en 2026 le reverse proxy moderne par excellence : HTTPS automatique sans configuration, syntaxe Caddyfile minimaliste, performance proche de Nginx, et écosystème de plugins riche (HTTP/3, Brotli, rate limiting, OAuth2, fail2ban). Pour les développeurs et PME africaines qui veulent un reverse proxy production-ready avec un minimum de friction, Caddy bat Nginx en simplicité et offre des fonctionnalités modernes (HTTP/3 natif) sans plugin tiers. Voici le guide complet 2026.
Ce pilier couvre l’écosystème complet. Les satellites détaillent : installation Caddy sur VPS, Caddy vs Nginx vs Traefik, headers sécurité CSP HSTS, rate limiting et fail2ban.
Pourquoi Caddy en 2026
- HTTPS automatique via Let’s Encrypt, sans configuration. Renouvellement transparent.
- Caddyfile lisible : 3 lignes pour servir un site avec HTTPS
- HTTP/3 natif (QUIC) sans configuration : meilleur pour les utilisateurs mobiles africains
- Reverse proxy stateful avec health checks, load balancing, sticky sessions
- File server performant pour servir du statique
- API REST de configuration pour automatisation
- Plugins riches : OAuth2 proxy, rate limiting, IP filtering, geo blocking
- Open-source Apache 2.0, écrit en Go (un binaire unique)
Caddy vs Nginx
Nginx reste plus utilisé en production en 2026 grâce à son inertie historique. Mais pour un nouveau projet, Caddy est généralement le meilleur choix : courbe d’apprentissage très douce, HTTPS qui marche sans réfléchir, configuration 5x plus courte. Voir notre comparatif détaillé.
Cas d’usage typiques
- Reverse proxy devant Node.js, Go, PHP-FPM, Python WSGI
- Servir un site Astro/Next.js statique buildé
- Multi-domaine sur un seul VPS
- Termination TLS pour Docker Compose stack
- Edge proxy avec rate limiting et auth
Étape 1 — Installer Caddy
# Ubuntu/Debian
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
# Vérifier
caddy version
systemctl status caddy
Voir notre tutoriel installation détaillé.
Étape 2 — Premier Caddyfile
# /etc/caddy/Caddyfile
# Site statique
exemple.sn {
root * /var/www/exemple.sn
file_server
encode gzip zstd
}
# Reverse proxy vers app Node.js
api.exemple.sn {
reverse_proxy 127.0.0.1:3000
}
# Multi-blocks pour la même config
*.exemple.sn, exemple.sn {
redir https://www.exemple.sn{uri}
}
sudo systemctl reload caddy
# HTTPS automatique apparaît en quelques secondes
Étape 3 — Headers et sécurité
api.exemple.sn {
reverse_proxy 127.0.0.1:3000
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Referrer-Policy "strict-origin-when-cross-origin"
Permissions-Policy "geolocation=(), camera=(), microphone=()"
}
}
Voir notre tutoriel headers sécurité.
Étape 4 — Compression et cache
exemple.sn {
root * /var/www/site/dist
file_server
# Brotli + gzip + zstd
encode gzip zstd
# Cache long pour assets fingerprintés
@assets path *.js *.css *.woff2 *.png *.jpg *.svg *.webp
header @assets Cache-Control "public, max-age=31536000, immutable"
# HTML pas caché
@html path *.html
header @html Cache-Control "public, max-age=0, must-revalidate"
}
Étape 5 — Reverse proxy avancé
api.exemple.sn {
reverse_proxy {
to 127.0.0.1:3000 127.0.0.1:3001 127.0.0.1:3002
lb_policy round_robin
health_uri /health
health_interval 10s
health_timeout 3s
transport http {
keepalive 30s
keepalive_idle_conns 32
}
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
Étape 6 — Rate limiting
Caddy a un plugin officieux caddy-ratelimit. Voir notre tutoriel rate limiting et fail2ban.
Étape 7 — Wildcard et DNS-01
Pour un certificat *.exemple.sn, Caddy utilise le DNS-01 challenge. Configuration via plugin DNS provider (Cloudflare, OVH, Gandi) :
# Builder Caddy avec plugin Cloudflare
xcaddy build --with github.com/caddy-dns/cloudflare
# Caddyfile
*.exemple.sn {
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
reverse_proxy 127.0.0.1:3000
}
Étape 8 — JSON config et API
Caddy supporte aussi un format JSON natif (plus verbeux mais plus puissant) et une API REST de configuration sur localhost:2019. Pratique pour automatiser via Ansible ou un orchestrateur.
Adaptation Afrique de l’Ouest
Pour une PME ouest-africaine, Caddy supprime toute la complexité Nginx + Certbot + cron renouvellement. HTTP/3 améliore la perf perçue sur connexions mobiles 4G instables (très fréquentes en Afrique). Avec quelques lignes de Caddyfile, vous gérez 10 domaines, 5 reverse proxies, et la sécurité headers.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| HTTPS challenge fail | DNS pas propagé | Vérifier dig, attendre, retenter |
| « too many requests » Let’s Encrypt | Rate limit hit | Tester avec staging CA d’abord |
| 502 Bad Gateway | Backend pas démarré | Vérifier service backend, port |
| Permission denied port 80/443 | Pas root, capability manquante | setcap cap_net_bind_service ou systemd |