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.
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.
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.