Medloft

nginx-Timeouts: Woran man dreht, wenn der Upstream langsam antwortet

Unsere Reporting-API braucht für manche Antworten länger als eine Minute. Standardmäßig wartet nginx 60 Sekunden auf den Upstream und liefert dem Client dann einen 504 – obwohl der Dienst noch rechnet.

Welche Parameter wichtig sind

location /reports/ {
    proxy_pass http://reports;
    proxy_connect_timeout 5s;
    proxy_read_timeout 180s;
    proxy_send_timeout 30s;
    proxy_buffering on;
}

proxy_connect_timeout sollte kurz bleiben: Nimmt der Upstream die Verbindung nicht innerhalb weniger Sekunden an, bringt längeres Warten nichts. proxy_read_timeout ist die Pause zwischen zwei Lesevorgängen, nicht die Gesamtdauer der Antwort – eine gestreamte Antwort darf also beliebig lange laufen.

Fazit

Timeouts sollte man gezielt für einzelne Locations erhöhen, nicht global – sonst blockieren langsame Anfragen Worker an Stellen, wo sie nichts zu suchen haben.