Back to Blog
webserver docker comparison

Caddy vs Nginx vs Traefik

Drei Reverse Proxies, drei Philosophien. Hier mein Vergleich aus der Praxis.

Kurzübersicht

AspektCaddyNginxTraefik
KonfigurationCaddyfilenginx.confYAML/Labels
Auto-SSLJaNein (Certbot)Ja
Docker-IntegrationOkayManualExzellent
PerformanceSehr gutExzellentGut
LernkurveFlachSteilMittel

Caddy - Der Einfache

Wann nutzen?

  • Kleine bis mittlere Projekte
  • Wenn du schnell fertig sein willst
  • Statische Seiten oder einfache Proxies

Beispiel-Config

example.com {
    reverse_proxy localhost:3000
}

api.example.com {
    reverse_proxy localhost:8080
}

Das war's. SSL automatisch. Kein Certbot. Keine Cronjobs.

Docker

services:
  caddy:
    image: caddy:2-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

Vorteile

  • Kürzeste Config
  • Auto-SSL out of the box
  • Tolle Defaults (HTTPS redirect, Security Headers)

Nachteile

  • Weniger flexibel als Nginx
  • Keine native Docker-Discovery
  • Community kleiner

Nginx - Der Klassiker

Wann nutzen?

  • High-Performance nötig
  • Komplexe Routing-Logik
  • Load Balancing
  • Legacy-Projekte

Beispiel-Config

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Mehr Arbeit, mehr Kontrolle.

Docker mit Certbot

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./sites:/etc/nginx/conf.d:ro
      - certbot_certs:/etc/letsencrypt:ro

  certbot:
    image: certbot/certbot
    volumes:
      - certbot_certs:/etc/letsencrypt

Vorteile

  • Beste Performance
  • Extrem flexibel
  • Riesige Community
  • Jedes Tutorial nutzt Nginx

Nachteile

  • Verbose Konfiguration
  • SSL ist Handarbeit
  • Reload bei Config-Änderungen

Traefik - Der Docker-Native

Wann nutzen?

  • Docker/Kubernetes Umgebungen
  • Viele Services die sich ändern
  • Microservices
  • Automatisierung wichtig

Beispiel-Setup

Einmal Traefik konfigurieren:

# traefik.yml
entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  docker:
    exposedByDefault: false

certificatesResolvers:
  letsencrypt:
    acme:
      email: you@example.com
      storage: acme.json
      httpChallenge:
        entryPoint: http

Services per Labels:

services:
  app:
    image: myapp
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.routers.app.tls.certresolver=letsencrypt"

Neue Domain? Neues Label. Fertig.

Vorteile

  • Beste Docker-Integration
  • Auto-Discovery von Containern
  • Auto-SSL wie Caddy
  • Dashboard inklusive

Nachteile

  • Komplexer bei Nicht-Docker
  • Labels können unübersichtlich werden
  • Debugging schwieriger

Meine Empfehlung

Single Server, wenige Sites

Caddy

Einfach. Schnell. Funktioniert.

High Traffic, komplexe Anforderungen

Nginx

Performance. Kontrolle. Bewährt.

Docker-Umgebung, viele Services

Traefik

Set and forget. Skaliert automatisch.

Hybrid-Ansatz

Ich nutze oft:

  • Traefik als Edge-Proxy (SSL Termination)
  • Nginx in Containern für komplexe Sites
services:
  nginx:
    image: nginx
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.web.rule=Host(`example.com`)"

Best of both worlds.

Fazit

Es gibt keinen "besten" Reverse Proxy. Es kommt auf den Use Case an:

  • Schnell fertig werden → Caddy
  • Maximum Performance → Nginx
  • Docker-First → Traefik

Probier alle drei aus. Du wirst merken, welcher zu deinem Workflow passt.

Made with by Daniel Hiller

|