Zum Inhalt springen

Reverse-Proxy

Im Betrieb läuft Klokk hinter einem Reverse-Proxy, der HTTPS übernimmt. Klokk selbst lauscht auf einfachem HTTP, Port 8080.

Setzen Sie diese beiden Variablen, sobald Klokk hinter HTTPS läuft:

Variable Wert Wofür
BASE_URL https://zeit.example.de (ohne Schrägstrich am Ende) Links in E-Mails, Kalender-Abos und die Adresse, an die Passkeys gebunden sind
SESSION_SECURE_COOKIE true (im Betrieb Standard) Cookies werden nur über HTTPS gesendet
Caddyfile
zeit.example.de {
reverse_proxy klokk:8080
}

Caddy holt und erneuert die TLS-Zertifikate selbst und reicht X-Forwarded-For und X-Forwarded-Proto von sich aus weiter.

Live-Aktualisierungen: Klokk hält für Benachrichtigungen und die Stempeluhr eine Verbindung offen (/api/events, Server-Sent Events). nginx und Traefik bittet es, sie nicht zu puffern; schließt ein Proxy sie trotzdem, verbindet sich der Browser selbst neu.

Klokk protokolliert die IP-Adresse der Clients (Audit-Log, Begrenzung von Anmeldeversuchen, IP-Freigabeliste für Admins). Hinter einem Proxy liest es X-Forwarded-For – aber nur von Proxys, denen es vertraut, damit niemand eine Adresse vortäuschen kann, indem er den Header selbst mitschickt.

  • Ein Proxy auf demselben Host oder im privaten Netz (der Normalfall): nichts einzustellen. Klokk vertraut dem direkten Proxy, wenn seine Adresse privat oder Loopback ist, und übernimmt den Eintrag, den er angehängt hat.
  • Mehrere Proxys hintereinander (etwa Cloudflare → eine WAF → Klokk): die äußeren in TRUSTED_PROXIES eintragen:
Wert Vertraut
cloudflare den veröffentlichten Adressbereichen von Cloudflare; CF-Connecting-IP gilt dann von dort
private allen privaten und Loopback-Bereichen – für Ketten innerhalb eines privaten Netzes
203.0.113.10, 198.51.100.0/24 einzelnen Adressen oder CIDR-Bereichen

Mehrere Werte trennen Sie mit Kommas, zum Beispiel TRUSTED_PROXIES=cloudflare,private.