Ein 504 heißt, die Seite wurde noch gebaut, als Nginx aufhörte zu warten. Nichts ist abgestürzt. Etwas hat länger gedauert, als es darf — und die ehrliche Frage lautet: was.

Finden Sie die langsame Anfrage

PHP-FPM schreibt ein Slow-Log, wenn Sie es darum bitten, und nennt genau die Funktion, die lief, als die Uhr ablief. Das ist die ganze Antwort — schalten Sie es also ein, bevor Sie sonst etwas ändern.

; in the pool config
request_slowlog_timeout = 5s
slowlog = /var/log/php8.3-fpm-slow.log
  1. PHP-FPM neu laden — systemctl reload php8.3-fpm
  2. Rufen Sie die langsame Seite erneut auf — Eine Anfrage genügt.
  3. Lesen Sie den Trace — tail -60 /var/log/php8.3-fpm-slow.log — der oberste Frame ist das, was lief.

Die drei Dinge, die es meistens sind

  • Ein externer Aufruf ohne Timeout. Ein Zahlungsdienst oder eine API, die nicht mehr antwortet, hält Ihre Seite fest, solange der Socket offen bleibt. Jede ausgehende Anfrage braucht ihr eigenes Timeout, und fünf Sekunden sind großzügig.
  • Eine Abfrage ohne Index. Eine Tabelle, die letztes Jahr klein war, ist es heute nicht mehr. Das Slow-Query-Log nennt sie.
  • Eine Schleife über ein Verzeichnis. Ein Ordner, der auf hunderttausend Dateien angewachsen ist, braucht Minuten, um aufgelistet zu werden.
fastcgi_read_timeout zu erhöhen lässt den Fehler verschwinden und lässt den Besucher fünf statt einer Minute auf einen leeren Tab starren. Beheben Sie das Warten, nicht die Grenze.

Wann es doch richtig ist, es zu erhöhen

Ein Fall: eine absichtlich lange Aufgabe, die Sie selbst angestoßen haben — eine Migration, ein großer Import — auf einer Seite, die nur Sie benutzen. Erhöhen Sie es nur für diesen einen Ort, niemals global.

location = /admin/import.php {
    fastcgi_read_timeout 600;
}
Alles, was ein Besucher auslösen kann, gehört in eine Warteschlange. Die Seite startet die Aufgabe und kehrt sofort zurück; die Aufgabe meldet sich, wenn sie fertig ist.