Reverse Proxy einrichten: Caddy, Traefik & Nginx im Vergleich
Was ein Reverse Proxy macht und welcher sich für Sie lohnt – mit SSL via Let's Encrypt.
Am Ende dieser Anleitung wissen Sie, was ein Reverse Proxy ist und wofür man ihn braucht. Sie kennen die Unterschiede zwischen Caddy, Traefik und dem Nginx Proxy Manager und können sich für das passende Werkzeug entscheiden. Und Sie haben Ihren ersten Dienst hinter einem Reverse Proxy laufen – inklusive automatischem HTTPS-Zertifikat, sodass Ihre Seite über eine sichere https://-Adresse erreichbar ist.
Das brauchen Sie vorab
- Ein Server mit Linux (zum Beispiel Ubuntu 22.04), auf dem Sie Administratorrechte haben. Ohne eigenen Server, auf dem Sie Software installieren dürfen, funktioniert nichts von dem Folgenden. Ein günstiger virtueller Server (VPS) bei einem Hoster reicht völlig aus.
- Eine eigene Domain, also ein Name wie
meine-seite.de. Let's Encrypt stellt kostenlose SSL-Zertifikate nur für echte Domains aus, nicht für nackte IP-Adressen. Ohne Domain gibt es also kein automatisches HTTPS. - Zugriff auf die DNS-Einstellungen Ihrer Domain. DNS ist das 'Telefonbuch des Internets': Es verbindet Ihren Domainnamen mit der IP-Adresse Ihres Servers. Sie müssen dort einen Eintrag setzen können.
- Ein Terminal-Programm, um sich per SSH mit dem Server zu verbinden. SSH ist eine sichere Fernverbindung, über die Sie Befehle auf dem Server eingeben. Auf Mac und Linux ist das im 'Terminal' schon dabei, unter Windows nutzen Sie die PowerShell.
- Grundlegende Sicherheit im Umgang mit der Kommandozeile: Sie sollten wissen, dass Sie Befehle Zeichen für Zeichen korrekt eingeben müssen und dass ein falsch getippter Befehl Fehler verursachen kann.
Schritt für Schritt
-
Verstehen, was ein Reverse Proxy überhaupt macht
Bevor Sie etwas installieren, sollten Sie das Grundprinzip verstehen. Ein Reverse Proxy ist ein Vermittler. Er steht zwischen dem Besucher (dem Browser) und Ihren eigentlichen Programmen (den Backend-Diensten). Der Besucher spricht immer nur mit dem Reverse Proxy, und dieser leitet die Anfrage an das richtige Programm im Hintergrund weiter.
Warum braucht man das? Stellen Sie sich vor, Sie haben mehrere Programme auf einem Server: ein Blog, eine Cloud für Ihre Dateien und ein Dashboard. Jedes läuft auf einem eigenen internen 'Port' – das ist wie eine Türnummer im Haus, zum Beispiel Port 3000 oder 8080. Nach außen möchten Besucher aber alle über die normalen Web-Türen erreichbar sein: Port 80 für
httpund Port 443 fürhttps.Genau das löst der Reverse Proxy. Er hört auf Port 80 und 443 und entscheidet anhand des Domainnamens, wohin die Anfrage geht. Ruft jemand
blog.meine-seite.deauf, schickt er ihn zum Blog. Ruft jemandcloud.meine-seite.deauf, schickt er ihn zur Cloud. Nebenbei kümmert er sich um die Verschlüsselung (SSL-Terminierung), sodass der Verkehr sicher überhttpsläuft.Merken Sie sich diese drei Begriffe: 'Backend' = das eigentliche Programm im Hintergrund. 'Port' = die interne Türnummer. 'SSL-Zertifikat' = der digitale Ausweis, der
httpsund das grüne Schloss im Browser ermöglicht. -
Das passende Werkzeug auswählen: Caddy, Traefik oder Nginx Proxy Manager
Es gibt viele Reverse Proxys, aber drei sind besonders anfängerfreundlich – jeder mit einem eigenen Schwerpunkt. Nehmen Sie sich kurz Zeit für die Wahl, denn sie bestimmt, wie einfach der Rest wird.
Caddy ist die einfachste Lösung. Es ist ein einzelnes Programm (eine 'Binary', also eine fertige ausführbare Datei), und es holt sich HTTPS-Zertifikate völlig automatisch, ohne dass Sie irgendetwas einstellen müssen. Die Konfiguration passt oft in zwei Zeilen. Ideal, wenn Sie ein bis fünf Dienste betreiben und keine Lust auf Komplexität haben.
Traefik ist für die Docker-Welt gemacht. Docker ist eine Technik, mit der man Programme in isolierten 'Containern' verpackt. Traefik erkennt neue Container automatisch und richtet sie selbstständig ein. Das ist mächtig, hat aber eine steilere Lernkurve – Sie sollten Docker schon kennen.
Der Nginx Proxy Manager hat als Einziger eine grafische Weboberfläche, die Sie im Browser bedienen. Sie klicken sich durch Menüs, statt Textdateien zu bearbeiten. SSL aktivieren Sie per Häkchen. Für diese Anleitung wählen wir Caddy als Hauptbeispiel, weil es am schnellsten zum Erfolg führt – die anderen beiden zeige ich Ihnen danach ergänzend.
-
Die DNS-Einstellung für Ihre Domain setzen
Damit ein Besucher Ihre Domain überhaupt bei Ihrem Server findet, muss der Domainname auf die IP-Adresse Ihres Servers zeigen. Diese Verbindung stellen Sie in der DNS-Verwaltung Ihres Domain-Anbieters her.
Melden Sie sich bei Ihrem Domain-Anbieter an und öffnen Sie den Bereich für DNS-Einträge. Legen Sie dort einen sogenannten A-Record an. Ein 'A-Record' ist einfach ein Eintrag, der einen Namen mit einer IPv4-Adresse verknüpft. Als Name tragen Sie zum Beispiel
blogein (fürblog.meine-seite.de), als Wert die IP-Adresse Ihres Servers.Die IP-Adresse Ihres Servers finden Sie im Kundenbereich Ihres Hosters oder direkt auf dem Server mit dem folgenden Befehl. Dieser Befehl fragt bei einem Internetdienst nach, wie Ihr Server von außen gesehen wird, und zeigt die öffentliche IP-Adresse an:
curl ifconfig.me -
Prüfen, ob der DNS-Eintrag wirkt
DNS-Änderungen brauchen manchmal ein paar Minuten, bis sie überall im Internet bekannt sind. Bevor Sie weitermachen, sollten Sie kontrollieren, ob Ihr Domainname schon auf die richtige IP zeigt. Sonst kann Let's Encrypt später kein Zertifikat ausstellen.
Führen Sie auf Ihrem Server den folgenden Befehl aus.
digist ein Werkzeug, das DNS-Einträge abfragt. Der Zusatz+shortsorgt dafür, dass nur das Wesentliche angezeigt wird, nämlich die IP-Adresse, auf die Ihre Domain aktuell verweist:Ersetzen Sie
blog.meine-seite.dedurch Ihre eigene Subdomain. Nach dem Ausführen sollte genau die IP-Adresse Ihres Servers erscheinen. Ist das der Fall, hat DNS funktioniert und Sie können weitermachen. Erscheint gar nichts oder eine falsche Adresse, warten Sie fünf Minuten und versuchen es erneut.dig +short blog.meine-seite.de -
Caddy installieren
Jetzt installieren wir Caddy. Wir holen es aus dem offiziellen Software-Verzeichnis (Repository), damit Sie automatisch saubere Updates bekommen. Ein 'Repository' ist eine Art App-Store für Linux-Programme.
Verbinden Sie sich zunächst per SSH mit Ihrem Server. Führen Sie dann nacheinander die folgenden Befehle aus. Der erste Block installiert Hilfsprogramme, fügt den digitalen Schlüssel des Caddy-Repositorys hinzu (damit Ihr System dessen Echtheit prüfen kann) und trägt das Repository in Ihre Paketquellen ein:
Führen Sie danach die Aktualisierung und die eigentliche Installation aus. Der Befehl
apt updatefrischt die Liste verfügbarer Programme auf, undapt install caddyinstalliert Caddy dann. Nach erfolgreicher Installation sehen Sie in der Ausgabe, dass Caddy eingerichtet und als Hintergrunddienst gestartet wurde.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 caddy -
Prüfen, ob Caddy läuft
Caddy startet nach der Installation automatisch als sogenannter 'Dienst' im Hintergrund – das bedeutet, es läuft dauerhaft, auch nach einem Neustart des Servers. Kontrollieren wir das kurz.
Der folgende Befehl zeigt den Status des Caddy-Dienstes an.
systemctlist das Werkzeug, mit dem Linux Hintergrunddienste verwaltet, undstatusfragt den aktuellen Zustand ab:In der Ausgabe suchen Sie nach der grün markierten Zeile
active (running). Steht dort 'running', läuft Caddy einwandfrei. Mit der Tasteqverlassen Sie die Anzeige wieder. Sollte dort 'failed' stehen, notieren Sie sich die Fehlermeldung – dazu später mehr im Problem-Abschnitt.sudo systemctl status caddy -
Die Caddy-Konfiguration schreiben (Ihr erster Dienst mit HTTPS)
Jetzt kommt der spannende Teil. Caddy wird über eine Textdatei namens
Caddyfilegesteuert. Diese liegt unter/etc/caddy/Caddyfile. Öffnen Sie sie mit einem Texteditor wienano, der direkt im Terminal läuft:Löschen Sie den vorhandenen Beispielinhalt und tragen Sie stattdessen Ihre Konfiguration ein. Im folgenden Beispiel sagen wir Caddy: 'Wenn jemand
blog.meine-seite.deaufruft, leite die Anfrage an das Programm weiter, das lokal auf Port 3000 läuft.' Der Ausdruckreverse_proxy localhost:3000bedeutet genau das –localhostheißt 'derselbe Server', und3000ist die interne Türnummer Ihres Backends.Das Schöne: Sie müssen für HTTPS nichts weiter tun. Sobald Sie einen echten Domainnamen verwenden, holt Caddy automatisch ein Let's-Encrypt-Zertifikat und aktiviert die Verschlüsselung. In
nanospeichern Sie mitStrg + O, bestätigen mitEnterund schließen mitStrg + X.Passen Sie Domain und Port an Ihre Situation an. Wenn Ihr eigentliches Programm auf einem anderen Port läuft, ersetzen Sie die
3000entsprechend.sudo nano /etc/caddy/Caddyfile # Inhalt der Datei: blog.meine-seite.de { reverse_proxy localhost:3000 } -
Caddy neu laden und das Ergebnis testen
Damit Ihre Änderungen wirksam werden, muss Caddy die neue Konfiguration einlesen. Ein 'Reload' lädt die Einstellungen neu, ohne den Dienst komplett anzuhalten – laufende Verbindungen brechen also nicht ab.
Führen Sie den folgenden Befehl aus. Er weist den Caddy-Dienst an, die geänderte Datei erneut zu lesen. Erscheint danach keine Fehlermeldung, hat alles geklappt. Caddy beginnt nun im Hintergrund, das SSL-Zertifikat bei Let's Encrypt anzufordern – das dauert wenige Sekunden.
Öffnen Sie danach Ihren Browser und geben Sie
https://blog.meine-seite.deein. Sie sollten Ihr Backend-Programm sehen, und in der Adressleiste erscheint ein Schloss-Symbol für eine sichere Verbindung. Herzlichen Glückwunsch – Ihr erster Dienst läuft jetzt hinter einem Reverse Proxy mit automatischem HTTPS.sudo systemctl reload caddy -
Die Alternativen kennenlernen: Traefik und Nginx Proxy Manager
Damit Sie eine informierte Wahl treffen können, hier die beiden anderen Wege in Kurzform. Beide setzen Docker voraus, also die Container-Technik von vorhin.
Beim Nginx Proxy Manager starten Sie einen fertigen Container und bedienen dann alles im Browser. Nach dem Start erreichen Sie die Verwaltungsoberfläche über Port
81(Adressehttp://IHRE-IP:81). Dort legen Sie 'Proxy Hosts' per Formular an: Domain eintragen, Zielserver und Port angeben, im Reiter 'SSL' ein Let's-Encrypt-Zertifikat mit einem Klick anfordern. Perfekt, wenn Sie ungern in Textdateien arbeiten. Das folgende Docker-Compose-Beispiel startet den Manager:Traefik hingegen konfiguriert man über 'Labels', das sind kleine Beschriftungen direkt an Ihren Docker-Containern. Traefik liest diese Labels aus und richtet den Dienst automatisch ein, sobald ein Container startet. Die zentralen Grundeinstellungen (etwa die 'entryPoints' für Port 80 und 443 und der 'certificatesResolver' für Let's Encrypt) legen Sie einmalig in einer Datei
traefik.ymlfest. Das ist die flexibelste, aber auch anspruchsvollste Variante und lohnt sich vor allem, wenn Sie viele Container automatisiert betreiben.# docker-compose.yml für Nginx Proxy Manager services: npm: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
Häufige Probleme und Lösungen
Das HTTPS-Zertifikat wird nicht ausgestellt und die Seite ist nur über http erreichbar.
In fast allen Fällen zeigt Ihr DNS-Eintrag noch nicht auf den Server oder die Ports 80 und 443 sind durch eine Firewall blockiert. Let's Encrypt muss Ihren Server über Port 80 erreichen, um den Domainbesitz zu prüfen. Kontrollieren Sie mit dig +short IHRE-DOMAIN, ob die richtige IP erscheint, und öffnen Sie die Ports mit sudo ufw allow 80 und sudo ufw allow 443. Danach mit sudo systemctl reload caddy erneut versuchen.
Der Befehl systemctl status caddy zeigt 'failed' statt 'active (running)'.
Meist steckt ein Tippfehler in der Caddyfile dahinter, etwa eine fehlende geschweifte Klammer. Prüfen Sie die Datei zuerst mit caddy validate --config /etc/caddy/Caddyfile. Dieser Befehl meldet Ihnen die genaue fehlerhafte Zeile. Korrigieren Sie den Fehler in sudo nano /etc/caddy/Caddyfile, speichern Sie und starten Sie mit sudo systemctl restart caddy neu.
Die Seite zeigt '502 Bad Gateway'.
Der Reverse Proxy läuft, aber er erreicht Ihr Backend-Programm nicht. Das bedeutet, das eigentliche Programm läuft entweder gar nicht oder auf einem anderen Port als in der Konfiguration angegeben. Prüfen Sie mit sudo ss -tlnp, welche Programme auf welchen Ports lauschen, und passen Sie die Portnummer in Ihrer Caddyfile entsprechend an.
Fazit
Sie verstehen jetzt, dass ein Reverse Proxy als Vermittler mehrere Dienste über eine sichere Adresse erreichbar macht und dabei automatisch für HTTPS sorgt. Mit Caddy haben Sie den schnellsten Einstieg gewählt und Ihren ersten Dienst live gebracht. Wenn Sie später mit vielen Docker-Containern arbeiten, ist Traefik einen Blick wert, und wer lieber klickt statt tippt, ist mit dem Nginx Proxy Manager gut bedient.
Für Self-Hosting-Setups empfehlen wir einen VPS mit mindestens 2 GB RAM. Hetzner Cloud ist unser Standard-Partner für zuverlässige, günstige Server aus deutschen Rechenzentren.
Hetzner Cloud ab 3,29 € → Mit einem Kauf über diesen Link unterstützen Sie unsere Arbeit – ohne Mehrkosten für Sie.Häufige Fragen
Muss ich für jeden neuen Dienst ein neues SSL-Zertifikat manuell beantragen?
Nein. Genau das ist der große Vor