Reverse proxy, HTTPS et Let's Encrypt expliqués simplement, et pourquoi Caddy est le plus simple pour l'auto-hébergement. Avec un exemple Docker Compose.
Dès qu'on auto-héberge une application (Vaultwarden, Nextcloud, un site…), on croise deux notions : le reverse proxy et le certificat HTTPS. Ce guide les explique simplement, puis montre pourquoi Caddy rend tout ça presque automatique.
Le reverse proxy : l'accueil de l'immeuble
Imaginez un immeuble de bureaux. Les visiteurs ne montent pas directement dans les étages : ils passent par l'accueil. L'accueil vérifie qui ils sont, et les oriente vers le bon bureau.
Un reverse proxy (« proxy inverse »), c'est cet accueil :
Internet ──► Reverse proxy (Caddy) ──► Vaultwarden
ports 80 et 443 (invisible depuis Internet)
└──► autre applicationIl reçoit toutes les visites, et selon le nom de domaine demandé (coffre.exemple.fr, cloud.exemple.fr…), il transmet la requête à la bonne application.
Pourquoi c'est utile :
- Un seul point d'entrée. Une seule application est exposée sur Internet, toutes les autres restent cachées derrière.
- Plusieurs services sur un même serveur, chacun avec son sous-domaine, alors qu'il n'y a qu'un seul port 443.
- Le HTTPS géré à un seul endroit, au lieu de le configurer dans chaque application.
HTTPS, certificats et Let's Encrypt
HTTPS, c'est HTTP chiffré : personne entre vous et le serveur (votre fournisseur d'accès, le Wi-Fi d'un café…) ne peut lire ou modifier ce qui circule. C'est le cadenas dans la barre d'adresse.
Pour que le navigateur fasse confiance au serveur, celui-ci doit présenter un certificat : une sorte de carte d'identité qui prouve « je suis bien coffre.exemple.fr ». Ce certificat est signé par une autorité reconnue par les navigateurs.
Let's Encrypt est une autorité de certification gratuite et à but non lucratif. Elle délivre des certificats de courte durée (90 jours aujourd'hui, une durée appelée à raccourcir), à renouveler régulièrement. Pour prouver que vous contrôlez bien le domaine, elle vérifie que le domaine pointe vers votre serveur et que celui-ci répond (en général sur le port 80).
📚 Let's Encrypt : comment ça marche
Pour un gestionnaire de mots de passe, HTTPS n'est pas une option : les applications Bitwarden refusent de se connecter à un serveur sans HTTPS valide.
Pourquoi Caddy
Avec Nginx ou Apache, obtenir un certificat demande d'installer un outil à part (Certbot), de le configurer, de programmer le renouvellement… Caddy fait tout ça tout seul, par défaut :
- il obtient le certificat au premier démarrage ;
- il le renouvelle automatiquement avant expiration ;
- il redirige HTTP vers HTTPS ;
- il active HTTP/2 et HTTP/3.
Sa configuration tient en quelques lignes. Pour Vaultwarden :
coffre.exemple.fr {
encode zstd gzip
reverse_proxy vaultwarden:80
}C'est tout. Ligne par ligne :
coffre.exemple.fr { ... }: « pour ce domaine, voici les règles » (et Caddy en déduit qu'il faut un certificat pour ce nom) ;encode zstd gzip: compresse les réponses, les pages se chargent plus vite ;reverse_proxy vaultwarden:80: transmet tout au conteneurvaultwarden, sur son port interne 80.
Avec Docker Compose
Le schéma classique : Caddy et l'application dans le même fichier Compose. Ils partagent un réseau interne, et seul Caddy publie des ports.
services:
app:
image: vaultwarden/server:latest
restart: unless-stopped
# pas de "ports:" : l'application n'est joignable que par Caddy
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
- ./caddy-config:/configLe volume caddy-data est important : c'est là que Caddy garde ses certificats. Sans lui, Caddy en redemanderait à chaque redémarrage, et Let's Encrypt finirait par vous bloquer temporairement (il limite le nombre de demandes).
Ce schéma a un autre avantage : il évite le piège de Docker qui contourne ufw, puisque l'application ne publie aucun port. 👉 Docker contourne ufw : comprendre et se protéger.
Les erreurs fréquentes
| Symptôme | Cause | Solution |
|---|---|---|
| Pas de certificat, erreur dans les logs | Le DNS ne pointe pas (encore) vers le serveur | Vérifiez avec getent hosts votre-domaine, attendez la propagation |
| Échec du « challenge » Let's Encrypt | Port 80 fermé dans le pare-feu | Ouvrez le port 80 en entrée (pare-feu de l'hébergeur et ufw) |
| Caddy ne démarre pas : « is a directory » | Le Caddyfile n'existait pas au premier lancement, Docker a créé un dossier | docker compose down, supprimez le dossier, créez le fichier, relancez |
| « too many certificates » | Certificats non conservés entre les redémarrages | Montez le volume /data de Caddy |
Pour voir ce que fait Caddy en direct :
docker compose logs -f caddyPour aller plus loin
- Documentation de Caddy
- Caddy : la directive reverse_proxy
- Mise en pratique complète : Installer Vaultwarden sur un VPS européen
Mots-clés :
Les noms de logiciels et marques éventuellement cités dans cet article (Nextcloud, Matomo, Plausible, Umami, Vaultwarden, Bitwarden, Passbolt, Infisical, Activepieces, ERPNext, Dolibarr, etc.) appartiennent à leurs titulaires respectifs et ne sont mentionnés qu'à titre nominatif ou de comparaison. Le Coq Numérique n'est ni affilié, ni partenaire, ni sponsorisé par ces éditeurs, installe et infogère uniquement des versions non modifiées de ces logiciels libres, et n'inclut pas leurs modules « Enterprise »/commerciaux dans ses offres. Voir nos mentions légales.
Passez à l'action
Protégez vos données et mettez-vous en conformité RGPD. Audit offert sous 24 h.
Demander mon audit offert