Pourquoi choisir Caddy comme frontal sur votre VPS ?
La complexité historique d'un reverse proxy tient au TLS : générer un certificat, configurer le renouvellement, gérer la redirection HTTP→HTTPS. Caddy supprime tout cela. Dès que vous indiquez un nom de domaine dans le Caddyfile, il contacte Let's Encrypt (ou ZeroSSL en secours), provisionne le certificat, l'agrafe (OCSP stapling) et le renouvelle en tâche de fond. La configuration est lisible, courte, et rechargeable à chaud sans coupure de service.
Les atouts de Caddy en production
- HTTPS automatique de bout en bout : émission, renouvellement et redirection sans intervention
- Caddyfile minimaliste : un bloc de quelques lignes par site, bien plus court qu'une conf Nginx
- Reverse proxy intégré avec health checks et load balancing vers vos conteneurs ou ports locaux
- HTTP/2 et HTTP/3 (QUIC) activés par défaut
- Rechargement à chaud de la configuration (
caddy reload) sans interruption des connexions - API d'administration JSON pour piloter la configuration dynamiquement
Prérequis
Caddy est sobre : 1 vCPU et 512 Mo à 1 Go de RAM suffisent pour servir plusieurs sites en reverse proxy. Vous avez le choix entre l'installer comme binaire système (service systemd) sur Ubuntu/Debian, ou le faire tourner en conteneur Docker. Dans les deux cas, il vous faut un domaine pointant vers l'IP du VPS et les ports 80, 443 (et 443/UDP pour HTTP/3) ouverts dans votre pare-feu.
Déployer Caddy en reverse proxy
Installer Caddy
Sur Ubuntu/Debian, ajoutez le dépôt officiel puis apt install caddy. Caddy s'enregistre comme service systemd actif au démarrage. Vérifiez : systemctl status caddy. En mode conteneur, partez de l'image caddy:latest et montez un volume sur /data pour persister les certificats.
Pointer le DNS et ouvrir les ports
Créez un enregistrement A app.votredomaine.com vers l'IP du VPS. Ouvrez les ports nécessaires : ufw allow 80, ufw allow 443 et ufw allow 443/udp pour HTTP/3. Le port 80 est indispensable au challenge HTTP de Let's Encrypt.
Écrire le Caddyfile
Éditez /etc/caddy/Caddyfile. Pour exposer une application qui tourne en local sur le port 3000 : app.votredomaine.com { reverse_proxy localhost:3000 }. C'est tout : Caddy déduit qu'il faut du HTTPS car vous avez indiqué un domaine et déclenche l'émission du certificat.
Recharger et vérifier
Appliquez la configuration sans coupure : caddy reload --config /etc/caddy/Caddyfile. Suivez l'obtention du certificat dans les logs : journalctl -u caddy -f. Au premier appel HTTPS de votre domaine, le certificat est en place.
Ajouter en-têtes de sécurité et compression
Enrichissez le bloc avec une directive header pour HSTS et les en-têtes anti-clickjacking, et activez encode gzip zstd pour la compression. Comme la conf est déclarative, ces ajouts restent lisibles et un simple caddy reload les applique.
Pour héberger plusieurs applications sur le même VPS, listez simplement plusieurs blocs de site dans le même Caddyfile, chacun avec son reverse_proxy. Et pour le développement local sans domaine public, remplacez le nom de domaine par :80 ou utilisez la directive tls internal : Caddy génère alors une CA locale et signe lui-même le certificat, pratique pour un environnement de préproduction interne.
La documentation officielle
Pour la configuration avancée et les options propres à l'outil, référez-vous à la documentation officielle de Caddy. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins, les mises à jour majeures et les cas d'usage spécifiques.