Reverse proxy Caddy, HTTPS automatique

Mets un HTTPS automatique devant tes services avec Caddy

Caddy te donne un reverse proxy HTTPS automatique en quelques minutes : installation Linux, Caddyfile pour plusieurs services et certificat renouvelé tout seul.

Tu as un service qui tourne chez toi — un serveur de fichiers, une base de notes, un tableau de bord domotique — et tu en as marre de taper http://192.168.1.50:8080 à chaque fois, et d'expliquer à tes proches pourquoi c'est pas sécurisé. Caddy règle ça en quelques minutes : un petit serveur libre qui s'intercale devant tes applications et leur donne à chacune une vraie adresse en HTTPS, avec le cadenas automatique. À la fin de ce tuto, tu auras un reverse proxy fonctionnel, un certificat SSL renouvelé tout seul, et aucune ligne de config ésotérique.

De quoi tu as besoin

Un reverse proxy, c'est un programme qui se place entre le visiteur et ton application : il reçoit la requête, la transmet au bon service, puis ramène la réponse. Il sert à regrouper plusieurs services derrière une seule adresse et un seul certificat. Pour suivre ce tuto, il te faut :

  • un serveur Linux (Debian, Ubuntu ou un Raspberry Pi avec le système de base) accessibles sur les ports 80 et 443 — ceux de l'HTTP et de l'HTTPS standards ;
  • un nom de domaine, même pas cher (un .fr ou un sous-domaine comme service.tondomaine.fr) qui pointe vers l'IP publique de ta machine ;
  • une application qui répond en HTTP sur un port local, par exemple un serveur de fichiers, pour servir de cobaye.

Caddy est écrit en Go, sort en binaire unique, et se distingue de nginx ou Apache par une promesse rare : le HTTPS gratuit et automatique par défaut, sans plugin à configurer. La version actuelle stable est la 2.11.

Étape 1 — Installer Caddy

La voie officielle sur Debian et Ubuntu passe par le dépôt du projet. Copie ces trois commandes dans un terminal :

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
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 chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo apt update && sudo apt install caddy

À la fin, vérifie que le service est bien lancé et note sa version :

sudo systemctl status caddy --no-pager
caddy version

Si tu veux tester sans installation système, Caddy existe aussi en image Docker et en binaire unique que tu peux poser n'importe où — mais le paquet officiel gère déjà le service et sa mise à jour, donc c'est le chemin recommandé pour démarrer.

Étape 2 — Lancer un reverse proxy sans aucune config

Le plus spectaculaire : Caddy sait faire un proxy fonctionnel avec une seule commande, sans fichier. Supposons que ton application écoute sur le port 8080 en local :

sudo setcap cap_net_bind_service=+ep $(which caddy)  # autorise les ports 80/443 sans root
caddy reverse-proxy --from mon-super-service.tondomaine.fr --to :8080

Lance ça, puis ouvre l'adresse dans un navigateur : un certificat HTTPS valide est déjà en place, délivré et renouvelé automatiquement par Caddy. C'est l'idée derrière tout le reste : dès que Caddy connaît un nom de domaine, il va chercher un certificat certifié auprès d'une autorité de confiance, exactement comme les gros sites.

Cette ligne suffit pour un service unique. Mais dès que tu en as plusieurs, il vaut mieux passer par un fichier de configuration propre, qui se relit, se sauvegarde et se met en version.

Étape 3 — Configurer plusieurs services avec un Caddyfile

Le Caddyfile est le fichier de config de Caddy, volontairement lisible : chaque bloc commence par le nom de domaine, et en dessous, ses règles. Crée un fichier Caddyfile pour deux services, chacun sur son sous-domaine :

#/etc/caddy/Caddyfile
photos.tondomaine.fr {
    reverse_proxy 127.0.0.1:8080
}

notes.tondomaine.fr {
    reverse_proxy 127.0.0.1:9000
}

reverse_proxy est la directive qui dit à Caddy de prendre tout le trafic qui arrive sur ce domaine et de le renvoyer vers l'adresse indiquée. Pas besoin d'ouvrir plusieurs ports : tout passe par 443, Caddy fait le tri selon le nom de domaine demandé.

Charge la config et vérifie qu'elle est valide :

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Chaque sous-domaine doit avoir un enregistrement DNS (un enregistrement de type A, qui relie un nom à l'adresse IP de ta machine) pointant vers ton IP publique. Caddy s'occupera du reste : certificat, renouvellement, redirection HTTP vers HTTPS.

Source : logo officiel de Caddy (domaine public, Wikimedia Commons)

Vérifier que ça fonctionne

Une fois la config chargée, fais ce test simple :

curl -I https://photos.tondomaine.fr
# attendu : HTTP/2 200 et une entrée server: Caddy
curl -s https://photos.tondomaine.fr | head -5

Si tu vois HTTP/2 200 avec une ligne server: Caddy, ton proxy tourne et ton certificat est en place. Pour aller plus loin, Caddy expose aussi une page d'état sur le port local 2019 via son API d'administration.

Limites et pièges

  • ports 80 et 443 fermés : si le certificat n'aboutit pas, vérifie que ton routeur ne bloque pas ces deux ports et que l'enregistrement DNS pointe bien vers l'IP publique ;
  • ne jamais supprimer le dossier de données Caddy entre deux démarrages — il stocke les certificats ; en le perdant, tu redemandes un certificat à chaque fois et Let's Encrypt peut te bannir temporairement ;
  • pour un usage purement local sans domaine public, Caddy peut générer son propre certificat interne avec la directive tls internal ;
  • les applications qui doivent connaître l'adresse d'origine du visiteur peuvent avoir besoin des en-têtes transmis par Caddy (X-Forwarded-For, X-Forwarded-Proto), à ajouter au besoin.

Pourquoi c'est mieux que l'adresse IP devenue illisible

Avec Caddy, tu passes d'une URL en http://192.168.x.x:8080, inutilisable loin de ton réseau, à une adresse en HTTPS renouvelée automatiquement. C'est un des gestes les plus rentables de l'auto-hébergement : une seule installation, et tous tes services à venir s'ajoutent en quelques lignes. La config est assez simple pour s'oublier — et c'est exactement le but.

Sources

Guide de démarrage rapide du reverse proxy, dans la documentation officielle de Caddy, avec les exemples de la ligne de commande et du Caddyfile.

La page d'installation officielle de Caddy, qui liste les dépôts Debian, Ubuntu et Raspbian ainsi que l'image Docker.

Le dépôt GitHub de caddyserver/caddy, avec l'historique des versions et le code source. Sur la dernière release, Caddy se situe en version 2.11.

Le logo officiel de Caddy (domaine public), hébergé sur Wikimedia Commons, utilisé comme illustration de cet article.



Recherche, relecture et illustration assistées par IA. Le contenu reflète le travail éditorial de la rédaction.

No comments yet