Ein 504 Gateway Timeout bedeutet, dass ein Server in der Mitte einen anderen Server um etwas gebeten und das Warten aufgegeben hat. Die Seite, die Sie wollten, existiert. Die Maschine, die sie gebaut hätte, hat nicht rechtzeitig geantwortet, und die Maschine davor hat aufgehört, die Tür offen zu halten.

Wenn Sie Besucher sind: Es liegt nicht an Ihrem Rechner, nicht an Ihrem Browser und nicht an Ihrer Verbindung. Jeder Fehlercode, der mit 5 beginnt, ist die Seite selbst, die ihr eigenes Problem meldet. Den Cache zu leeren hilft nicht, und ein anderer Browser auch nicht.

Das Bild mit zwei Servern

Fast keine Website ist eine einzige Maschine. Eine Anfrage trifft typischerweise auf etwas davor

  • einen Load Balancer, einen Reverse Proxy, einen CDN-Edge - und dieses Etwas reicht sie an das weiter, was die Anwendung tatsächlich ausführt, und leitet die Antwort dann an Sie zurück.

Ein 504 ist der Bericht der vorderen Maschine über die hintere: Ich habe gefragt, ich habe gewartet, es kam nichts, hier ist ein Statuscode, damit Sie nicht auf einen leeren Tab starren. Die Anwendung der Seite hat nie die Gelegenheit bekommen, Ihnen etwas zu sagen, weshalb eine 504-Seite meist generisch aussieht statt wie die Seite drumherum.

Das erklärt auch das Timing. Ein 504 kommt typischerweise nach einer langen Pause an - zehn Sekunden, dreißig, sechzig - denn die Pause ist der Punkt. Etwas hat es noch versucht.

504 gegen 502, die ständig verwechselt werden

Sie kommen von derselben Stelle und bedeuten Verschiedenes, und zu wissen, welchen von beiden man hat, engt die Ursache erheblich ein.

502 Bad Gateway
Der Upstream-Server hat geantwortet, und die Antwort war unbrauchbar - eine abgelehnte Verbindung, ein abgestürzter Prozess, Müll auf der Leitung. Meist schnell
504 Gateway Timeout
Der Upstream-Server hat innerhalb der erlaubten Zeit überhaupt nicht geantwortet. Meist langsam, und die Verzögerung vor dem Fehler ist selbst ein Hinweis

Grob: 502 heißt “es hat etwas Falsches gesagt”, 504 heißt “es hat noch nichts gesagt”. Ein 502 deutet darauf hin, dass etwas kaputt oder aus ist; ein 504 deutet darauf hin, dass etwas langsam, hängen geblieben oder überlastet ist.

Eine Feinheit, die zu kennen sich lohnt, weil die meisten Artikel sie übersehen: Manche Anbieter verwenden dafür eigene Codes. Cloudflare gibt 524 zurück, wenn Ihr Origin eine Verbindung annimmt und dann zu lange zum Antworten braucht, was dieselbe Geschichte ist, erzählt von einer anderen Schicht. Wenn Sie hinter einem CDN sitzen, kann die Zahl, die Sie bekommen, deren eigene sein statt der standardisierten.

Wenn Sie der Besucher sind

Es gibt sehr wenig zu tun, und das ist die ehrliche Antwort und nicht bloß eine kurze.

Warten Sie eine Minute und laden Sie neu. Ein 504 ist oft vorübergehend - eine langsame Abfrage, ein neu startender Prozess, ein Verkehrsstoß. Wenn er bleibt, schauen Sie, ob der Dienst eine Statusseite hat oder ob sonst jemand davon berichtet, denn der Fehler liegt auf deren Seite und nur sie können ihn beheben.

Das eine wirklich Nützliche, das Sie tun können, ist, es ihnen zu sagen, mit genug Details, dass sie es finden können. Welche Seite, zu welcher Zeit, und was Sie gerade getan haben. Ein 504 an einer Kasse um 14:32 ist etwas, das ein Entwickler in einem Log nachschlagen kann; “Ihre Seite ist kaputt” ist es nicht.

Wenn es Ihre eigene Seite ist

Vier Ursachen machen die meisten davon aus, ungefähr in dieser Reihenfolge.

  • Eine langsame Sache. Eine Datenbankabfrage ohne Index, eine externe API, die Sie aufrufen, während der Nutzer wartet, ein Report, der über die Größe hinausgewachsen ist, für die er gedacht war. Die Anfrage hängt nicht, sie ist nur langsamer als die Geduld des Proxys.
  • Ein Timeout unterhalb der Wirklichkeit. Nginx nimmt für einen weitergereichten Lesevorgang standardmäßig sechzig Sekunden. Wenn Ihre langsamste legitime Anfrage neunzig braucht, servieren Sie 504er genau den Leuten, die die wichtigste Funktion benutzen.
  • Erschöpfte Worker. Jeder Anwendungsprozess ist beschäftigt, also stauen sich neue Anfragen dahinter und erreichen den Code gar nicht erst. Das kommt in Schüben und sieht aus, als falle die Seite komplett aus, weil sie das im Effekt auch tut.
  • Der Netzwerkpfad. Eine Security Group, eine DNS-Änderung, ein Dienst, der umgezogen ist. Seltener, und meist total statt zeitweise.

Finden Sie heraus, welche Schicht ihn ausgegeben hat, bevor Sie irgendetwas ändern. Das Zugriffslog des Proxys hält fest, welchen Status er zurückgegeben und wie lange er gewartet hat; das Anwendungslog zeigt entweder eine Anfrage, die so lange gedauert hat, oder für diesen Moment gar nichts. Diese beiden Fälle haben entgegengesetzte Lösungen, und dazwischen zu raten ist, wie Leute am Ende ein Timeout hochsetzen, das nie das Problem war.

Das Timeout hochzusetzen ist der verlockende Zug und für sich genommen meist falsch. Es macht aus einem schnellen Fehlschlag einen langsamen und verschiebt die Warteschlange woandershin. Es ist nur dann der richtige Zug, wenn Sie wissen, dass die Arbeit legitimerweise so lange dauert und nicht asynchron erledigt werden kann.

Session Replay

Kostenlose Chrome-Erweiterung. Ein Klick auf der Seite, die sich falsch verhält, erfasst den Screenshot, die Konsole und das Netzwerkprotokoll und gibt Ihnen einen Link, den Sie ins Ticket einfügen können.

Erweiterung holen

Warum sie später so schwer zu verfolgen sind

Ein 504 ist ein Moment. Bis jemand ihn erwähnt, ist die langsame Abfrage fertig, die Worker sind abgeflossen, der Schub ist vorbei, und die Seite lädt perfekt, wenn Sie es versuchen.

Der Bericht kommt also als “es war vorhin kaputt” an, und es gibt nichts anzusehen. Was ihn auffindbar machen würde, ist das, was der Browser damals gesehen hat: welche Anfrage in ein Timeout lief, gegen welchen Host, wie lange sie gewartet hat und was auf der Seite sonst schon fehlgeschlagen war. Das steht im Netzwerk-Panel, solange es passiert, und ist in dem Moment weg, in dem der Tab geschlossen wird.

Das ist das Argument dafür, es im Moment zu erfassen statt es hinterher zu beschreiben - eine HAR-Datei ist der übliche Weg, das von Hand zu tun, und genau das trägt das Netzwerkprotokoll in einem Fehlerbericht. Dieselben Belege beantworten die andere Frage, die man früh stellen sollte, nämlich ob das Timeout Ihr Dienst oder der von jemand anderem war: Die Host-Spalte sagt, welcher.

In einem Absatz

Ein 504 bedeutet, dass der Server davor den Server dahinter gefragt hat und ihm die Geduld ausging. Es ist das Problem der Seite und nicht Ihres, es heißt meist langsam statt kaputt, und es unterscheidet sich von einem 502 durch die Pause davor. Wenn es Ihre eigene Seite ist, finden Sie heraus, welche Schicht in ein Timeout lief, bevor Sie an irgendeiner Timeout-Einstellung drehen, denn das Log, das nichts aufgezeichnet hat, und das Log, das neunzig Sekunden aufgezeichnet hat, erzählen Ihnen zwei verschiedene Geschichten.