Caddy vs. nginx: HTTPS, Config und welchen du wählen solltest
Caddy vs. nginx
Caddy vs. nginx: Automatisches HTTPS und Config im Vergleich | We.Inc
Caddy vs. nginx für echte Aufgaben: automatisches HTTPS, statische Websites, Reverse Proxys, Load Balancing und WebSockets, mit einem Generator, der beide Configs für deine Domain schreibt.
Der wichtigste Unterschied sind die Zertifikate. Caddy liefert jede Website standardmäßig über HTTPS aus, holt und erneuert Zertifikate bei Let's Encrypt oder ZeroSSL und leitet HTTP für dich um. nginx braucht Zertifikatsdateien, die du bereitstellst, von einem ACME-Client oder seinem separaten acme-Modul. Caddyfiles sind kürzer; nginx bietet feinere Kontrolle und eine viel längere Erfolgsgeschichte.
Caddy und nginx im Vergleich bei Alltagsaufgaben
Aufgabe
Caddy
HTTPS-Zertifikate
Automatisch für jede öffentliche Domain in der Config
Du richtest ssl_certificate auf Dateien oder fügst das separate ngx_http_acme_module hinzu
Weiterleitung von HTTP auf HTTPS
Automatisch
Ein server-Block auf Port 80, der 301 zurückgibt
Komprimierung
encode zstd gzip
gzip on
Reverse Proxy
reverse_proxy localhost:3000
proxy_pass in einer location, plus Header
WebSockets durch den Proxy
Wird automatisch erledigt
Header Upgrade und Connection weiterleiten
Standard beim Load Balancing
Round Robin
Aktive Health Checks
health_uri in reverse_proxy
health_check nur in der kommerziellen Edition
Config prüfen und neu laden
caddy validate, caddy reload
nginx -t, nginx -s reload
Die meisten Vergleiche hören bei den Features auf. Hier gibst du eine Domain und einen App-Port ein und bekommst beide Configs, sodass du genau siehst, wie viel jeder Server für dasselbe Ergebnis von dir verlangt. Unter dem Generator findest du Snippets im direkten Vergleich für die häufigsten Aufgaben und danach ehrliche Hinweise, wofür sich welcher eignet.
Gib deine Domain ein und wähle, ob der Server statische Dateien ausliefern oder Anfragen an eine App weiterleiten soll.
Schalte Komprimierung und die www-Weiterleitung um, um zu sehen, welche Zeilen jeder Server braucht.
Kopiere das Caddyfile neben das caddy-Binary und führe caddy run aus, oder kopiere den nginx-Block in eine Datei in deinem sites-Ordner.
Für nginx holst du zuerst mit deinem ACME-Client ein Zertifikat und passt vor dem Neuladen die beiden Zertifikatspfade an.
Caddy kann nur dann ein öffentliches Zertifikat bekommen, wenn der A- oder AAAA-Eintrag der Domain auf die Maschine zeigt und die Ports 80 und 443 von außen erreichbar sind.
Gib Caddy dauerhaften, beschreibbaren Speicher für sein Datenverzeichnis. In Containern mountest du ein Volume, sonst fordert Caddy bei jedem Neustart neue Zertifikate an.
Führe caddy fmt auf von Hand bearbeiteten Caddyfiles aus; es räumt die Einrückung jedes Mal gleich auf.
Teste bei nginx vor jedem Neuladen mit nginx -t. Das prüft die Syntax und versucht außerdem, Dateien zu öffnen, auf die die Config verweist, etwa Zertifikatspfade.
Seit Caddy 2.8 braucht die root-Direktive den Matcher * nicht mehr, root /srv funktioniert also. Ältere Anleitungen mit root * /srv sind weiterhin gültig.
Häufige Fragen
Ist Caddy ein direkter Ersatz für nginx?
Für statische Websites, Reverse Proxys und einfaches Load Balancing meist ja, und die Config wird kürzer. Große nginx-Setups mit vielen Drittanbieter-Modulen, komplexer map- und rewrite-Logik oder fein abgestimmtem Caching haben womöglich kein Eins-zu-eins-Gegenstück in Caddy. Übersetze und teste also eine Website nach der anderen.
Kann nginx inzwischen automatisches HTTPS?
nginx hat ein ngx_http_acme_module, das ACME implementiert, aber es ist standardmäßig nicht enthalten. Du installierst es als separates dynamisches Modul (das Paket nginx-module-acme) und konfigurierst einen Aussteller. Ohne das Modul kommen die Zertifikate von einem externen Client.
Kann Caddy mir HTTPS auf localhost geben?
Ja. Für localhost und interne Namen erstellt Caddy eine eigene lokale Zertifizierungsstelle und stellt daraus Zertifikate aus. Dein System fragt eventuell einmal, ob es dem Root-Zertifikat vertrauen soll.
Welcher hat die bessere Performance?
Wir veröffentlichen keine Geschwindigkeitswerte, weil sie mit Hardware, TLS-Einstellungen und Workload stark schwanken. Beide bewältigen typische Websites und APIs problemlos. Wenn dir reiner Durchsatz wichtig ist, benchmarke dein eigenes Traffic-Muster auf deinen eigenen Servern.
Unterstützt Caddy Load Balancing und Health Checks?
Ja. Liste mehrere Upstreams in reverse_proxy auf, wähle eine lb_policy wie round_robin oder least_conn und füge health_uri für aktive Checks oder fail_duration für passive hinzu. Ohne Policy wählt Caddy die Upstreams zufällig.
Was automatisches HTTPS wirklich abdeckt
Nennt ein Caddyfile eine öffentliche Domain, holt Caddy über ACME ein Zertifikat, liefert die Website auf 443 aus, leitet Port 80 auf HTTPS um und erneuert das Zertifikat im Hintergrund. Fällt ein Aussteller aus, versucht Caddy es erneut und kann auf einen anderen ausweichen. Nichts in der Config erwähnt TLS, außer du willst die Standardwerte ändern.
nginx überlässt das dir. Üblich ist ein ACME-Client, der Zertifikatsdateien schreibt und nginx nach der Erneuerung neu lädt, oder das neuere acme-Modul, das du bewusst installierst.
Wann nginx besser passt
nginx ist überall: in Distributionen, Container-Images und Hosting-Panels, mit Dokumentation und Antworten für fast jede Situation. Teams, die es bereits betreiben, auf bestimmte Module angewiesen sind oder feine Kontrolle über Buffering und Caching brauchen, haben wenig Grund zu wechseln.
Wann Caddy besser passt
Kleine Teams, Nebenprojekte und viele Domains profitieren am meisten davon, keine Zertifikate verwalten zu müssen. Das native Config-Format ist JSON, das caddy adapt aus einem Caddyfile erzeugt, und caddy reload schiebt über die Admin-API eine neue Config ohne Ausfallzeit in den laufenden Prozess.
Load Balancing über drei App-Server
Caddyfile
Round Robin über drei Backends, mit Health Checks im Hintergrund gegen /healthz.
Round Robin ist der Standard. Open-Source-nginx prüft die Gesundheit nur passiv, über fehlgeschlagene Anfragen.
WebSockets weiterleiten
Caddyfile
reverse_proxy führt das Upgrade durch und hält einen Tunnel in beide Richtungen offen, ohne zusätzliche Zeilen.
Die Header Upgrade und Connection müssen ausdrücklich weitergegeben werden; vor nginx 1.29.7 ist proxy_http_version 1.1 nötig.