Caddy ist ein moderner Webserver, der sich besonders gut als Reverse Proxy eignet. Er nimmt Anfragen aus dem Internet entgegen, leitet sie an Ihre Anwendungen weiter und kümmert sich vollautomatisch um HTTPS-Zertifikate von Let's Encrypt, inklusive Verlängerung. In dieser Anleitung installieren Sie Caddy unter Debian oder Ubuntu und veröffentlichen mehrere Anwendungen unter eigenen Subdomains.

Was ist ein Reverse Proxy?

Viele Anwendungen, etwa in Docker-Containern, laufen auf internen Ports wie 3000 oder 8080. Ein Reverse Proxy steht davor, lauscht auf den Standardports 80 und 443 und leitet jede Anfrage anhand des Domainnamens an die richtige Anwendung weiter:

  • status.ihre-domain.at → 127.0.0.1:3001
  • wiki.ihre-domain.at → 127.0.0.1:8080

Die Anwendungen selbst müssen sich nicht um Zertifikate kümmern und sind nicht direkt aus dem Internet erreichbar.

Voraussetzungen

  • Ein Server mit Debian oder Ubuntu und öffentlicher IP-Adresse
  • DNS-Einträge (A und gegebenenfalls AAAA) für alle Subdomains, die auf diesen Server zeigen
  • Die Ports 80 und 443 sind frei und in der Firewall geöffnet

Port 80 wird für die Bestätigung bei Let's Encrypt benötigt und leitet Besucher außerdem automatisch auf HTTPS um.

Schritt 1: Caddy installieren

Caddy stellt ein eigenes Paket-Repository bereit, das immer die aktuelle Version liefert:

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 apt update
sudo apt install -y caddy

Caddy läuft nun als Dienst. Rufen Sie die IP-Adresse des Servers im Browser auf, erscheint eine Begrüßungsseite.

Schritt 2: Firewall öffnen

Mit UFW:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp

Die UDP-Freigabe für Port 443 ermöglicht HTTP/3, das Caddy automatisch anbietet.

Schritt 3: Die Caddyfile bearbeiten

Die Konfiguration liegt in /etc/caddy/Caddyfile. Ersetzen Sie den Inhalt zum Beispiel durch:

{
    email admin@ihre-domain.at
}

status.ihre-domain.at {
    reverse_proxy 127.0.0.1:3001
}

wiki.ihre-domain.at {
    reverse_proxy 127.0.0.1:8080
}

Die E-Mail-Adresse im globalen Block nutzt Let's Encrypt für Hinweise zu Ihren Zertifikaten. Jeder weitere Block steht für eine Domain.

Schritt 4: Konfiguration prüfen und laden

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

Beim ersten Aufruf einer neuen Domain bezieht Caddy das Zertifikat. Das dauert meist nur wenige Sekunden. Den Ablauf verfolgen Sie im Log:

sudo journalctl -u caddy -f

Nützliche Erweiterungen

Mehrere Domains für eine Anwendung

ihre-domain.at, www.ihre-domain.at {
    reverse_proxy 127.0.0.1:8000
}

Weiterleitung von www auf die Hauptdomain

www.ihre-domain.at {
    redir https://ihre-domain.at{uri} permanent
}

Sicherheits-Header und Komprimierung

wiki.ihre-domain.at {
    encode zstd gzip
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "strict-origin-when-cross-origin"
        -Server
    }
    reverse_proxy 127.0.0.1:8080
}

Zugang mit Passwort schützen

Erzeugen Sie zuerst einen Passwort-Hash:

caddy hash-password

Dann in der Caddyfile:

intern.ihre-domain.at {
    basic_auth {
        admin $2a$14$HIER_DER_ERZEUGTE_HASH
    }
    reverse_proxy 127.0.0.1:9000
}

Zugriff auf bestimmte IP-Adressen beschränken

admin.ihre-domain.at {
    @extern not remote_ip 198.51.100.20 10.10.0.0/24
    respond @extern 403
    reverse_proxy 127.0.0.1:9000
}

Caddy und Docker

Läuft Caddy direkt auf dem Server, binden Sie die Ports Ihrer Container an 127.0.0.1, zum Beispiel 127.0.0.1:3001:3001. So sind die Anwendungen nur über Caddy erreichbar. Läuft Caddy selbst als Container, verbinden Sie ihn über ein gemeinsames Docker-Netzwerk mit den Anwendungen und verwenden in der Caddyfile den Containernamen, etwa reverse_proxy uptime-kuma:3001.

Fehlerbehebung

Zertifikat wird nicht ausgestellt

  • Prüfen Sie mit dig +short status.ihre-domain.at, ob die Domain auf Ihren Server zeigt. Gibt es auch einen AAAA-Eintrag, muss der Server auch per IPv6 erreichbar sein.
  • Sind die Ports 80 und 443 offen? Läuft eventuell noch ein anderer Webserver wie Apache oder nginx? Das prüfen Sie mit sudo ss -tlpn | grep -E ':80|:443'.
  • Bei vielen Fehlversuchen greift ein Limit von Let's Encrypt. Caddy weicht dann automatisch auf einen anderen Anbieter aus oder versucht es später erneut.

„502 Bad Gateway“

Caddy erreicht die Anwendung nicht. Prüfen Sie mit curl -I http://127.0.0.1:3001, ob die Anwendung lokal antwortet.

Weiterleitungsschleife

Manche Anwendungen leiten selbst auf HTTPS um, weil sie nicht wissen, dass sie hinter einem Proxy laufen. Caddy sendet standardmäßig den Header X-Forwarded-Proto. Aktivieren Sie in der Anwendung die Option für vertrauenswürdige Proxys.

Updates

Da Caddy aus dem offiziellen Repository installiert wurde, wird es mit sudo apt update && sudo apt upgrade aktualisiert. Zertifikate verlängert Caddy selbstständig.

Caddy läuft ressourcenschonend schon auf kleinen vServern. Für größere Umgebungen mit mehreren Backends bieten wir außerdem einen Loadbalancer an.

War diese Antwort hilfreich? 0 Benutzer fanden dies hilfreich (0 Stimmen)