Vergleich NGINX Proxy Manager


Caddy ist ein Reverse Proxy mit automatischem HTTPS, konfiguriert über eine einzige Textdatei.

|Nginx Proxy Manager|Caddy| |---|---|---| |Konfiguration|Web-UI + Datenbank|Caddyfile (Text, versionierbar)| |Zertifikate|Pro Host per Klick|Automatisch für jeden Block| |Websockets|Schalter pro Host|Funktioniert direkt| |Upload-Limit|client_max_body_size|Keins| |HTTP → HTTPS|Schalter pro Host|Automatisch|

Aufbau mit Docker Compose


services:
  caddy:
    image: caddy:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy_data:/data
      - ./caddy_config:/config

caddy_data muss persistent bleiben

Dort liegen Zertifikate und Account-Schlüssel, sonst drohen die Let’s-Encrypt-Rate-Limits.

Caddyfile


immich.fshrmnsfrnd.ddnss.de {
    reverse_proxy immich_server:2283
}
www.example.de {
    redir https://example.de{uri} permanent
}
ZielDirektive
Weiterreichen an Containerreverse_proxy name:port
Weiterleitung (301)redir https://ziel{uri} permanent
Eigenes Zertifikattls cert.pem key.pem
Staging-CA zum Testenacme_ca https://acme-staging-v02.api.letsencrypt.org/directory (globaler Block)

Netzwerke


Der Hostname im Caddyfile muss aus dem Caddy-Container auflösbar sein.

ZielEintrag
Container im gleichen Netzreverse_proxy containername:port
Anderer Rechner im LANreverse_proxy 192.168.x.x:port
Dienst auf dem Docker-Hostreverse_proxy host.docker.internal:port
localhostzeigt auf den Caddy-Container selbst
docker network create proxy
docker network connect proxy mein-container

Zertifikate


FallVerfahrenVoraussetzung
*.ddnss.de-SubdomainsLet’s Encrypt, automatischDNS + Port 80/443 offen
test.localhostInterne Caddy-CARoot-Zertifikat im Browser importieren
WildcardDNS-ChallengeCaddy-Plugin für den DNS-Anbieter
docker compose cp caddy:/data/caddy/pki/authorities/local/root.crt ./caddy-root.crt

Befehle


docker compose up -d caddy
docker compose logs -f caddy
docker compose exec -w /etc/caddy caddy caddy reload
docker compose exec -w /etc/caddy caddy caddy validate
docker compose exec -w /etc/caddy caddy caddy fmt --overwrite