Live-Tail/SSE zeigt nichts hinter eigenem Proxy¶
Der Live-Tail unter Logs — und jede andere Stelle, die per Server-Sent-Events (SSE) live aktualisiert — bleibt leer oder aktualisiert nur alle paar Minuten in einem Schwall, statt laufend. Das Symptom tritt fast ausschließlich auf, wenn ein eigener Reverse-Proxy vor Vesana steht (siehe TLS / Reverse-Proxy) — direkt gegen den Vesana-Stack ohne zusätzlichen Proxy funktioniert SSE ohne weitere Konfiguration.
Ursache: Response-Buffering¶
SSE hält eine HTTP-Verbindung offen und schickt einzelne Events, sobald sie anfallen. Ein Reverse-Proxy puffert Antworten standardmäßig, bis ein Puffer voll ist oder die Verbindung endet — bei einem Stream, der stundenlang offen bleibt und nur gelegentlich ein paar Bytes schickt, heißt das: der Client sieht nichts, bis der Proxy den Puffer irgendwann doch flusht (oder gar nicht).
Fix in nginx: proxy_buffering off; für die betroffene Location.
location /api/v1/logs/stream {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding off;
proxy_read_timeout 3600s;
}
Bei Traefik entspricht das der Standardeinstellung (kein Response-Buffering für normale Proxy-Requests) — meist reicht dort ein ausreichend hoher Timeout. Bei HAProxy: option http-buffer-request NICHT setzen und timeout server großzügig wählen. Bei Caddy ist SSE ohne zusätzliche Direktiven i. d. R. unproblematisch.
Zwei nginx-Schichten — beide brauchen das Flag¶
Läufst du im Split-Container-Modus vor-nginx (dein eigenes nginx/Caddy/Traefik terminiert TLS vor dem Vesana-Stack, siehe Admin-Zugriff & Split-Container), gibt es zwei nginx-Schichten zwischen Browser und Backend: dein eigenes nginx davor und das nginx im Vesana-Stack selbst dahinter. Beide müssen Buffering für den Stream-Pfad deaktiviert haben — reicht es nur an einer Stelle, bleibt das Problem bestehen, weil die jeweils andere Schicht weiter puffert.
Prüfe also:
- Dein eigenes Reverse-Proxy-Config —
proxy_buffering offfür/api/v1/logs/stream(und jede andere Stream-Route) - Das interne nginx im Compose-Stack — sollte SSE-Routen standardmäßig bereits korrekt konfiguriert haben; bei eigenen Anpassungen an dieser Config prüfen, ob Buffering versehentlich wieder aktiviert wurde
Diagnose: Liegt es wirklich am Proxy?¶
# Direkt gegen den Vesana-Stack testen (am Server selbst, Proxy umgehen):
curl -N -H "Authorization: Bearer <JWT>" \
"http://127.0.0.1:8080/api/v1/logs/stream?host=<host-id>"
Kommen hier laufend Events an, aber über den öffentlichen Domain-Namen nicht — ist die Ursache zu 100 % der Reverse-Proxy, nicht Vesana selbst. -N (--no-buffer) ist hier wichtig, sonst puffert schon curl selbst.
Verwandtes Symptom: Auto-Update-Overlay hängt¶
Der „Vesana wird gestartet …"-Splash beim Update (siehe UI-Probleme nach Update) pollt normale HTTP-Requests, keine SSE — von Buffering nicht betroffen. Hängt er trotzdem, ist das eine andere Ursache.
Checkliste¶
- [ ]
proxy_buffering offauf jeder Proxy-Schicht zwischen Browser und Vesana für die Stream-Route - [ ]
proxy_read_timeoutausreichend hoch (Stream bleibt lange offen) - [ ] Direkter
curl -N-Test gegen den Stack zeigt laufende Events? - [ ] Bei Split-Container
vor-nginx: beide nginx-Schichten geprüft, nicht nur die eigene