TL;DR — Kurzzusammenfassung

Vollständiger Leitfaden zu Traefik Middlewares: HTTP-Routing, Rate Limiting, Sicherheits-Header, Authentifizierung und Circuit Breaker für Produktion.

Traefik Middlewares: HTTP-Routing, Rate Limiting und Sicherheit

Traefik Middlewares sind der zentrale Mechanismus zur Transformation von HTTP-Anfragen und -Antworten zwischen dem Edge und Ihren Upstream-Diensten. Ob Sie Rate Limits durchsetzen, Sicherheits-Header injizieren, Pfad-Präfixe entfernen oder die Authentifizierung an einen externen Dienst delegieren möchten — jedes Verhalten ist ein diskretes Middleware-Objekt, das Sie an einen Router anhängen. Dieser Leitfaden behandelt alle wichtigen Middleware-Kategorien mit Konfigurationsbeispielen, einem Vergleich mit Alternativen und einem vollständigen Docker Compose-Beispiel für die Produktion.

Voraussetzungen

  • Traefik v2.x oder v3.x als Docker-Container oder auf einem Host ausgeführt
  • Grundlegende Kenntnisse mit Docker Compose Labels
  • Eine registrierte Domain mit DNS, die auf Ihren Server zeigt
  • Optional: Authelia oder OAuth2-Proxy für ForwardAuth-Flows

Traefik-Architektur: Die Request-Pipeline

Traefik organisiert den Datenverkehr durch vier Primitive:

  • Entrypoints — Netzwerkports, auf denen Traffic ankommt (:80, :443)
  • Router — ordnen eingehende Anfragen nach Host, Pfad oder Headern zu und leiten sie an einen Dienst weiter
  • Middlewares — transformieren die Anfrage oder Antwort (oder lehnen sie ab), bevor sie den Dienst erreicht
  • Services — die Upstream-Container oder -Server, die die endgültige Anfrage erhalten

Traefik erkennt diese Objekte automatisch aus Docker-Labels, Datei-Providern oder Kubernetes CRDs.

Middleware-Konfigurationsprovider

Docker-Labels

labels:
  - "traefik.http.middlewares.meine-header.headers.stsSeconds=31536000"
  - "traefik.http.routers.meineapp.middlewares=meine-header"

Datei-Provider (dynamisches YAML)

# dynamic/middlewares.yml
http:
  middlewares:
    meine-header:
      headers:
        stsSeconds: 31536000
        stsIncludeSubdomains: true

Sicherheits-Header-Middleware

Die Headers-Middleware injiziert oder modifiziert HTTP-Header in beiden Richtungen.

http:
  middlewares:
    sichere-header:
      headers:
        customRequestHeaders:
          X-Forwarded-Proto: "https"
        customResponseHeaders:
          X-Powered-By: ""
        stsSeconds: 31536000
        stsIncludeSubdomains: true
        stsPreload: true
        forceSTSHeader: true
        frameDeny: true
        contentTypeNosniff: true
        browserXssFilter: true
        referrerPolicy: "strict-origin-when-cross-origin"
        permissionsPolicy: "camera=(), microphone=(), geolocation=()"
        contentSecurityPolicy: "default-src 'self'; script-src 'self' 'unsafe-inline'"
        accessControlAllowOrigin: "https://beispiel.de"

Ein Header mit leerem Wert wird aus der Antwort entfernt.

Rate Limiting

Die RateLimit-Middleware begrenzt die Häufigkeit, mit der ein Client Anfragen stellen kann.

http:
  middlewares:
    api-limit:
      rateLimit:
        average: 100
        burst: 50
        period: 1m
        sourceCriterion:
          requestHeaderName: "X-API-Key"
  • average — zulässige Anfragen pro period
  • burst — maximaler Spitzenwert über dem Durchschnitt
  • period — gleitendes Zeitfenster (Standard 1s; unterstützt 1m, 1h)
  • sourceCriterion — identifiziert den “Client” per Header, Host oder IP-Strategie

Bei Deployments hinter einem CDN setzen Sie ipStrategy.depth: 1, damit Traefik die echte Client-IP verwendet.

BasicAuth und DigestAuth

Schützen Sie Routen mit HTTP-Authentifizierung, wenn kein SSO verfügbar ist.

http:
  middlewares:
    basis-auth:
      basicAuth:
        users:
          - "admin:$apr1$xyz$hashedpassword"
        usersFile: "/etc/traefik/.htpasswd"
        realm: "Administrationsbereich"
        removeHeader: true

Passwort-Hashes generieren mit:

htpasswd -nb admin meinpasswort

removeHeader: true entfernt den Authorization-Header vor der Weiterleitung, um Credential-Leaks zu verhindern.

ForwardAuth: SSO und OAuth2-Integration

ForwardAuth delegiert die Authentifizierungsentscheidung an einen externen Dienst wie Authelia oder OAuth2-Proxy.

http:
  middlewares:
    sso-auth:
      forwardAuth:
        address: "http://authelia:9091/api/verify"
        trustForwardHeader: true
        authResponseHeaders:
          - "Remote-User"
          - "Remote-Groups"
          - "Remote-Email"

Traefik sendet jede eingehende Anfrage zuerst an address. Gibt dieser Dienst 2xx zurück, wird die ursprüngliche Anfrage fortgesetzt.

Pfad-Manipulations-Middlewares

StripPrefix

Entfernt ein Präfix vor der Weiterleitung, nützlich wenn der Upstream einen Root-Pfad erwartet.

http:
  middlewares:
    strip-api:
      stripPrefix:
        prefixes:
          - "/api/v1"
        forceSlash: true

Eine Anfrage an /api/v1/benutzer kommt als /benutzer beim Upstream an.

AddPrefix

Fügt ein Präfix hinzu. Nützlich wenn mehrere Routen auf denselben Dienst zeigen.

http:
  middlewares:
    v2-hinzufuegen:
      addPrefix:
        prefix: "/v2"

ReplacePathRegex

http:
  middlewares:
    legacy-umleitung:
      replacePathRegex:
        regex: "^/alt/(.*)"
        replacement: "/neu/$1"

Komprimierung

http:
  middlewares:
    komprimieren:
      compress:
        excludedContentTypes:
          - "image/jpeg"
          - "image/png"
        minResponseBodyBytes: 1024

Traefik unterstützt gzip und brotli. Brotli wird verwendet, wenn der Client Accept-Encoding: br sendet.

Retry und CircuitBreaker

Retry

http:
  middlewares:
    wiederholen:
      retry:
        attempts: 3
        initialInterval: "100ms"

CircuitBreaker

http:
  middlewares:
    schaltkreis-unterbrecher:
      circuitBreaker:
        expression: "ResponseCodeRatio(500, 600, 0, 600) > 0.30"
        checkPeriod: "10s"
        fallbackDuration: "30s"
        recoveryDuration: "10s"

Der Schaltkreis öffnet sich, wenn expression wahr ist, und blockiert den Traffic für fallbackDuration.

IPAllowList

Beschränkt den Zugriff auf eine Whitelist von IP-Bereichen.

http:
  middlewares:
    nur-intern:
      ipAllowList:
        sourceRange:
          - "10.0.0.0/8"
          - "172.16.0.0/12"
          - "192.168.0.0/16"
        ipStrategy:
          depth: 2

Umleitungs-Middlewares

RedirectScheme (HTTP → HTTPS)

http:
  middlewares:
    https-umleitung:
      redirectScheme:
        scheme: "https"
        permanent: true

RedirectRegex (www → ohne www)

http:
  middlewares:
    www-umleitung:
      redirectRegex:
        regex: "^https://www\\.(.+)"
        replacement: "https://${1}"
        permanent: true

Middleware-Ketten

Ketten ermöglichen die Zusammensetzung mehrerer Middlewares zu einer einzigen benannten Pipeline.

http:
  middlewares:
    sicherer-stack:
      chain:
        middlewares:
          - sichere-header
          - https-umleitung
          - api-limit
          - sso-auth

Hängen Sie die Kette mit einem einzigen Label an einen Router:

labels:
  - "traefik.http.routers.meineapp.middlewares=sicherer-stack"

Vergleich: Traefik vs. Alternativen

FunktionTraefikNginx (Module)Envoy (Filter)Kong (Plugins)Caddy (Handler)
Rate LimitingEingebautlimit_reqratelimit filterOffizielles Pluginrate_limit
Auth-DelegationForwardAuthauth_requestext_authzOIDC-Pluginforward_auth
Circuit BreakerEingebautNicht nativEingebautErfordert PluginNicht nativ
Pfad-UmschreibungEingebautrewriterewrite filterEingebautrewrite
KomprimierungEingebautgzip-ModulcompressorNicht nativEingebaut
Dynamische KonfigAuto (Labels/CRD)Reload nötigxDS APIAdmin APIAuto (Caddyfile)

Vollständiges Docker Compose-Beispiel für die Produktion

Sie haben einen API-Dienst in der Produktion, der HTTPS, Rate Limiting, Sicherheits-Header und BasicAuth auf dem Admin-Pfad benötigt.

services:
  traefik:
    image: traefik:v3.1
    restart: unless-stopped
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entryPoint.to=websecure
      - --entrypoints.web.http.redirections.entryPoint.scheme=https
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.le.acme.email=ops@beispiel.de
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.le.acme.tlschallenge=true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    networks:
      - edge

  api:
    image: ghcr.io/beispiel/api:latest
    restart: unless-stopped
    networks:
      - edge
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=Host(`api.beispiel.de`)"
      - "traefik.http.routers.api.entrypoints=websecure"
      - "traefik.http.routers.api.tls.certresolver=le"
      - "traefik.http.routers.api.middlewares=sicherer-stack"
      - "traefik.http.services.api.loadbalancer.server.port=8080"
      - "traefik.http.middlewares.hdrs.headers.stsSeconds=31536000"
      - "traefik.http.middlewares.hdrs.headers.frameDeny=true"
      - "traefik.http.middlewares.rl.rateLimit.average=120"
      - "traefik.http.middlewares.rl.rateLimit.burst=40"
      - "traefik.http.middlewares.rl.rateLimit.period=1m"
      - "traefik.http.middlewares.compress.compress=true"
      - "traefik.http.middlewares.sicherer-stack.chain.middlewares=hdrs,rl,compress"

networks:
  edge:
    external: true

Fallstricke und Sonderfälle

  • Dollarzeichen in BasicAuth-Hashes müssen in Docker-Labels verdoppelt werden ($$), da Docker Compose $ als Variable interpoliert.
  • Die Reihenfolge der Middlewares in einer Kette ist wichtig. Wenden Sie Umleitungen vor der Authentifizierung an; Komprimierung kommt zuletzt.
  • Die Latenz von ForwardAuth fügt pro Anfrage einen zusätzlichen Round-Trip hinzu. Nutzen Sie Entscheidungs-Caching in Authelia oder OAuth2-Proxy.
  • RateLimit-Zähler sind pro Replikat. Bei drei Traefik-Replikas wird die erlaubte Rate mit drei multipliziert.
  • CircuitBreaker verwendet eine eigene Ausdruckssprache, nicht PromQL. Konsultieren Sie die offizielle Traefik-Dokumentation für ResponseCodeRatio und LatencyAtQuantileMS.

Zusammenfassung

  • Traefik Middlewares hängen an Routern und transformieren Anfragen, bevor sie Upstream-Dienste erreichen
  • Verwenden Sie Headers für HSTS, CSP und CORS; entfernen Sie immer sensible Header Richtung Upstream
  • RateLimit mit sourceCriterion verwaltet API-Throttling; konfigurieren Sie ipStrategy.depth hinter CDNs
  • ForwardAuth integriert Authelia und OAuth2-Proxy für SSO ohne Anwendungscode zu ändern
  • Chain-Middlewares komponieren wiederverwendbare Sicherheitspipelines, die mit einem Label an jeden Router gehängt werden

Verwandte Artikel