iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
HCL / JSON / Bash · Avancé

Caddy

Caddy de A à Z pour experts : Admin API REST, HTTPS automatique (ACME, DNS challenge, PKI interne), reverse proxy avancé, modules, on-demand TLS, clustering et production.

Caddy 2CaddyfileAdmin APIACMEDocker
01Pourquoi Caddy — ce qu'Apache et Nginx ne font pas02Architecture interne — Apps, modules et config JSON03Caddyfile avancé — matchers, snippets, directives04Admin API — configuration dynamique en JSON05HTTPS et PKI — ACME, wildcards, on-demand TLS, CA interne06Reverse proxy avancé — load balancing, health checks, transforms07Modules et plugins — forward_auth, security, ratelimit, modules custom08Production — logs, métriques Prometheus, clustering, Docker, Kubernetes
Chapitre 1·20 min

Pourquoi Caddy — ce qu'Apache et Nginx ne font pas

Apache et Nginx sont excellents. Ils sont aussi le résultat de 20 ans d'accumulation de features, de paradigmes de configuration incompatibles, et d'une époque où HTTPS était optionnel. Caddy part d'hypothèses différentes.

Le problème avec Nginx

Nginx est rapide. Sa configuration est lisible si on la pratique quotidiennement. Mais elle accuse son âge dès qu'on sort des sentiers battus.

HTTPS en Nginx :

server {
    listen 443 ssl;
    server_name example.com;
 
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;
 
    add_header Strict-Transport-Security "max-age=63072000" always;
 
    location / {
        proxy_pass http://localhost: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;
    }
}
 
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Plus certbot ou un cron qui tourne certbot renew, qui redémarre Nginx, et qui échoue silencieusement si les permissions changent.

HTTPS en Caddy :

example.com {
    reverse_proxy localhost:3000
}

Caddy gère ACME, la négociation du challenge HTTP-01 ou TLS-ALPN-01, le stockage du certificat, le renouvellement automatique, OCSP stapling, HSTS, et la redirection HTTP→HTTPS. Tout. Automatiquement.

Ce que Caddy fait structurellement différemment

1. HTTPS par défaut, pas en option

Caddy considère HTTPS comme l'état normal, pas comme une configuration supplémentaire. Toute adresse publique avec un nom de domaine valide → certificat automatique. Pas de flag, pas de setup certbot.

Si l'ACME échoue (domaine non résolu, port 80 bloqué), Caddy refuse de démarrer plutôt que de tourner en HTTP silencieusement.

2. Configuration rechargeable sans interruption

Nginx nécessite nginx -s reload qui peut échouer si la config est invalide, laissant le process dans un état ambigu.

Caddy valide la configuration avant de l'appliquer et la swap atomiquement. Zéro connexion perdue, zéro downtime.

# Nginx
nginx -t && nginx -s reload
 
# Caddy
caddy reload --config /etc/caddy/Caddyfile
# Ou via API (chapitre 4)
curl -X POST localhost:2019/load -H "Content-Type: text/caddyfile" --data-binary @Caddyfile

3. API de configuration REST native

Caddy expose son état complet en JSON via une API REST sur :2019. Vous pouvez lire, modifier, et remplacer n'importe quelle partie de la configuration en live, sans fichier, sans reload.

# Lire la config complète
curl localhost:2019/config/
 
# Ajouter un vhost dynamiquement
curl -X POST localhost:2019/config/apps/http/servers/main/routes \
  -H "Content-Type: application/json" \
  -d '{"match":[{"host":["nouveau.example.com"]}],"handle":[...]}'

Cette API est ce qui rend Caddy programmable — c'est la base d'OpenCaddyHost et de tout outil qui gère des proxies dynamiquement.

4. Architecture modulaire compilable

Nginx s'étend via des modules compilés statiquement ou des modules dynamiques (.so). L'écosystème est fragmenté, les versions de modules ne correspondent pas toujours aux versions de Nginx.

Caddy a un système de modules en Go. Chaque fonctionnalité — handler, matcher, storage, logger, provider ACME — est un module enregistré à l'exécution. Xcaddy compile une version custom avec les modules que vous voulez :

xcaddy build \
  --with github.com/caddy-dns/cloudflare \
  --with github.com/mholt/caddy-ratelimit \
  --with github.com/greenpau/caddy-security

Comparaison franche

CritèreApacheNginxCaddy
HTTPS automatiqueNon (Certbot externe)Non (Certbot externe)Oui (natif)
Rechargement liveOui (graceful)Oui (reload)Oui (atomique, API)
API de config dynamiqueNonNonOui (REST JSON)
Performances statiquesMoyenneExcellenteTrès bonne
Performances proxyBonneExcellenteExcellente
Courbe d'apprentissageÉlevéeMoyenneFaible (Caddyfile)
Config programmatiqueNonNonNatif (JSON)
PKI interneNonNonOui (pki app)
Mémoire (idle)~50 MB~5 MB~20 MB
LangageCCGo

Nginx reste supérieur pour : charges statiques extrêmes (images, gros fichiers), configurations fine-tuned avec sendfile, équipes qui connaissent Nginx par cœur.

Caddy est supérieur pour : HTTPS automatique, configuration programmatique, microservices, multi-tenant, environnements où les certificats tournent fréquemment.


Le chapitre suivant décortique l'architecture interne de Caddy — la différence entre Caddyfile et JSON, le rôle de chaque app, et comment les modules s'assemblent.

Suivant
Architecture interne — Apps, modules et config JSON

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main