Tous les services opérationnels Devise EUR Aucun frais de mise en service Vous êtes à La Réunion ?
‹ Serveurs VPS et Docker

Caddy : reverse proxy et HTTPS automatique

Caddy est un serveur web qui sert de reverse proxy : il reçoit le trafic sur les ports 80 et 443 et le transmet à vos applications selon le nom de domaine demandé. Sa particularité est le HTTPS automatique : il obtient et renouvelle seul un certificat Let's Encrypt pour chaque nom écrit dans sa configuration. Une ligne par site suffit, reverse_proxy app:3000, et il gère sans réglage les WebSocket et les en-têtes qui indiquent l'adresse du visiteur.

Par Jonathan Dewaele · publié le

Ce guide suit la documentation de la directive reverse_proxy et l'image Docker officielle de Caddy, relues le 14 octobre 2026 ; dernière version publiée à cette date : 2.11.7. La mise en place du certificat et les échecs de validation sont traités dans Un certificat SSL sur son VPS ; cet article s'attache au rôle de proxy devant plusieurs services.

Installer Caddy dans Docker

  1. Créez un réseau Docker partagé, que rejoindront Caddy et vos applications : docker network create proxy
  2. Créez un dossier ~/caddy et, dedans, un dossier conf qui contiendra le Caddyfile.
  3. Créez ~/caddy/compose.yaml :
services:
  caddy:
    image: caddy:2.11
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./conf:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - proxy

volumes:
  caddy_data:
  caddy_config:

networks:
  proxy:
    external: true
  1. Lancez-le : docker compose up -d

Ce fichier reprend celui de Un certificat SSL sur son VPS, avec une différence : Caddy rejoint le réseau proxy au lieu de partager le fichier compose de l'application. Le volume caddy_data, qui garde les certificats, y est expliqué.

Servir plusieurs applications

Dans le fichier compose de chaque application, rattachez son service au réseau proxy et ne publiez pas de port :

services:
  app:
    image: votre-application:1.0
    networks:
      - proxy

networks:
  proxy:
    external: true

Puis décrivez chaque site dans ~/caddy/conf/Caddyfile, un bloc par nom de domaine :

app.votre-domaine.fr {
	reverse_proxy app:3000
}

stats.votre-domaine.fr {
	reverse_proxy plausible:8000
}

Caddy joint chaque application par le nom de son service sur le réseau partagé ; WordPress avec Docker en donne un exemple complet. Chaque nom doit pointer vers le serveur avant le premier lancement, faute de quoi Let's Encrypt refuse le certificat ; voir Pointer un nom de domaine vers son VPS.

Recharger sans couper

Après une modification du Caddyfile, vérifiez d'abord la syntaxe avec docker compose exec -w /etc/caddy caddy caddy validate, puis rechargez comme l'indique Un certificat SSL sur son VPS. Si la configuration est fausse, Caddy garde l'ancienne et affiche l'erreur. La documentation précise qu'un rechargement ferme les connexions WebSocket ouvertes ; l'option stream_close_delay les laisse vivre un moment, par exemple stream_close_delay 5m dans le bloc reverse_proxy.

Ce que Caddy fait sans réglage

  • En-têtes du visiteur. Caddy pose X-Forwarded-For, X-Forwarded-Proto et X-Forwarded-Host, et ignore les valeurs envoyées par le visiteur pour empêcher l'usurpation. Votre application voit ainsi la vraie adresse et sait que la page a été demandée en HTTPS.
  • WebSocket. La connexion est montée en tunnel sans configuration, ce qu'attendent des outils comme Uptime Kuma.
  • Redirection vers HTTPS. Le port 80 renvoie vers le 443.

Quelques réglages courants

Répartir la charge entre deux instances d'une application : reverse_proxy app1:3000 app2:3000. Le choix par défaut est aléatoire, lb_policy round_robin le rend tournant.

Ajouter ou retirer un en-tête envoyé à l'application : header_up X-Exemple "valeur" pour l'ajouter, header_up -X-Exemple pour le retirer, à l'intérieur du bloc reverse_proxy.

Garder un journal des accès d'un site : ajoutez une ligne log dans son bloc, puis lisez-le avec docker compose logs -f caddy.

Sur un VPS Hubspace

Le pare-feu réseau placé devant le serveur ouvre déjà 80 et 443 en TCP, ce qui suffit à Caddy et à Let's Encrypt. Le port UDP 443, utile au HTTP/3, est fermé à la livraison ; sans lui, les sites restent servis en HTTPS ordinaire. Les ports de vos applications, eux, restent fermés depuis Internet même s'ils étaient publiés : le reverse proxy est la voie prévue. Ce pare-feu en amont explique aussi l'absence d'UFW, détaillée dans UFW : le pare-feu d'Ubuntu. Docker et Compose sont installés, utilisables par le compte admin sans sudo.

Un seul programme peut écouter sur 80 et 443 : choisissez Caddy, Traefik ou Nginx Proxy Manager, pas deux à la fois. Le principe du reverse proxy est expliqué dans Qu'est-ce qu'un reverse proxy.

Questions fréquentes

Caddy ou Traefik ?

Caddy se règle dans un fichier lisible, un bloc par site. Traefik se règle par des étiquettes posées sur chaque conteneur et découvre seul les nouveaux services. Les deux obtiennent les certificats automatiquement ; le choix est affaire de goût et d'habitude.

Où sont stockés les certificats ?

Dans le volume caddy_data. Le supprimer oblige Caddy à redemander tous les certificats, et des demandes répétées peuvent buter sur les limites de Let's Encrypt.

Mon application affiche l'adresse de Caddy au lieu de celle du visiteur ?

L'application doit lire l'en-tête X-Forwarded-For et faire confiance au proxy. Cherchez dans sa documentation le réglage des proxys de confiance (« trusted proxies ») et indiquez-y le réseau Docker.

Articles liés