So sieht die Meldung aus
2026/10/29 09:14:02 [error] 1234#1234: *5678 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 203.0.113.5, server: example.com, request: "POST /api/export HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock"Häufige Ursachen
- Die Anfrage ist schlicht langsam: eine lange Datenbankabfrage, ein Export, ein Bericht oder ein Aufruf einer langsamen externen API.
- Alle PHP-FPM-Worker sind belegt (
pm.max_childrenerreicht), neue Anfragen warten in der Schlange. - Das Standard-
fastcgi_read_timeoutbzw.proxy_read_timeoutvon 60 Sekunden ist kürzer, als die Aufgabe braucht. - Das Backend hängt, etwa in einem Deadlock oder beim Warten auf eine gesperrte Datei.
- Bei „while connecting to upstream“: ein Firewall- oder Netzwerkproblem zwischen nginx und dem Backend-Host.
Prüfen
- Welcher Teil lief in die Zeitüberschreitung? Das Ende der Logzeile lesen
grep -i 'timed out' /var/log/nginx/error.log | tail -n 20 - Sind alle PHP-FPM-Worker belegt?
grep -i 'max_children' /var/log/php8.3-fpm.log | tail -n 5 - Wie lange braucht das Backend für die langsame URL?
curl -s -o /dev/null -w '%{time_total}s\n' https://example.com/api/export - Ist das Backend überhaupt erreichbar?
systemctl status php8.3-fpm
Lösung
- Zuerst klären, warum die Anfrage langsam ist (Datenbank, externe API), und das beheben. Ein längeres Timeout verdeckt das Problem nur.
- Braucht die Aufgabe wirklich mehr Zeit, das Limit nur für diese Location erhöhen:
fastcgi_read_timeout 300;bzw.proxy_read_timeout 300;. pm.max_childrenim PHP-FPM-Pool erhöhen, wenn die Worker der Engpass sind und der RAM es zulässt.- Lange Jobs in den Hintergrund verlagern (Cron, Queue) und die Seite sofort antworten lassen.
- Bei „connecting to upstream“: Firewall und Adresse des Backends prüfen.
Häufige Fragen
Ich habe das Timeout in nginx erhöht, Nutzer sehen aber weiter einen Fehler. Warum?
Andere Ebenen haben eigene Grenzen: das max_execution_time von PHP, ein Load Balancer oder ein CDN. Cloudflare etwa trennt die Verbindung nach rund 100 Sekunden.
Ist 504 dasselbe wie 502?
Nein. 502 heißt, das Backend lieferte eine ungültige Antwort oder war nicht erreichbar. 504 heißt, es antwortete nicht rechtzeitig.