Wie behebe ich 504-Fehler, die bei der Verwendung eines Application Load Balancer auftreten?

Lesedauer: 3 Minute
0

Ich habe HTTP-504-Fehler in Application-Load-Balancer-Zugriffsprotokollen, Amazon-CloudWatch-Metriken oder bei der Verbindung mit meinem Service über einen Application Load Balancer gefunden. Was kann ich tun, um das Problem zu beheben?

Kurzbeschreibung

Ein HTTP-504-Fehler ist ein HTTP-Statuscode, der anzeigt, dass ein Gateway oder Proxy eine Zeitüberschreitung hat.

Application-Load-Balancer-HTTP-504-Fehler können auftreten, wenn:

  • Der Load Balancer konnte keine Verbindung zum Ziel herstellen, bevor das Verbindungstimeout abgelaufen ist (10 Sekunden).
  • Der Load Balancer stellte eine Verbindung zum Ziel her, aber das Ziel reagierte nicht, bevor die Zeitüberschreitung im Leerlauf abgelaufen war.
  • Die Netzwerk-ACL für das Subnetz erlaubte keinen Datenverkehr von den Zielen zu den Load-Balancer-Knoten an den kurzlebigen Ports (1024-65535).
  • Das Ziel gibt einen Content-Length-Header-Wert zurück, der größer als der Entitätskörper ist. Beim Load Balancer ist das Warten auf die fehlenden Bytes abgelaufen.
  • Das Ziel ist eine AWS-Lambda-Funktion, und der Service hat nicht reagiert, bevor das Verbindungstimeout abgelaufen ist.

Auflösung

Überprüfen Sie das Leerlauftimeout Ihres Load Balancers und ändern Sie es gegebenenfalls

Load-Balancer-HTTP 504-Fehler können auftreten, wenn die Backend-Instance nicht innerhalb des konfigurierten Zeitlimits für den Leerlauf auf die Anfrage reagiert hat. Standardmäßig beträgt das Zeitlimit für den Leerlauf für Application Load Balancer 60 Sekunden.

Wenn CloudWatch-Metriken aktiviert sind, überprüfen Sie CloudWatch-Metriken für Ihren Application Load Balancer. Die HttpCode_ELB_5XX-Metrik gibt an, dass der 504-Fehler vom Load Balancer herrührt. Wenn es keine HTTPCode_ELB_504_Count-Metrik-Datenpunkte gibt, werden die 504-Fehler von Ihren Anwendungsservern zurückgegeben, nicht vom Load Balancer.

Überprüfen Sie die Maximal- und Durchschnittswerte für die CloudWatch-Metrik TargetResponseTime. Der Timeout-Wert kann die Zeit angeben, die verstrichen ist, nachdem die Load-Balancer-Anforderung vom Ziel empfangen wurde.

Um das zu lösen:

Ändern Sie das Leerlauf-Timeout für Ihren Load Balancer so, dass die HTTP-Anforderung innerhalb des Zeitlimits für den Leerlauf abgeschlossen wird.

-oder-

Ändern Sie Ihre Anwendung so, dass sie schneller auf die HTTP-Anfrage reagiert. Stellen Sie sicher, dass die Anwendung nicht länger braucht, um zu reagieren als das konfigurierte Zeitlimit für den Leerlauf.

(Optional) Fügen Sie die folgenden benutzerdefinierten Filter in die Anwendungsprotokolle des Backend-Webservers ein, um die Ursache für die langsamen Antwortzeiten zu ermitteln:

Apache-Webserver

a- Apache : %D in log format

Nginx-Webserver

b- Nginx: $request_time and $upstream_response_timein log format

IIS-Webserver

c- IIS: “time-taken” in log format

Apache-Tomcat-Webserver

d- Apache Tomcat Access logs: %D in log format

Sicherstellen, dass Ihr Load Balancer Datenverkehr mit registrierten Zielen zulässt

Stellen Sie sicher, dass die Netzwerksicherheitsgruppen, die mit dem Load Balancer und den Backend-Zielen verknüpft sind, Datenverkehr voneinander in beide Richtungen auf den Verkehrs- und Zustandsprüfports zulassen. Stellen Sie sicher, dass die Netzwerk-ACL für das Subnetz Datenverkehr von den Zielen zu den Load-Balancer-Knoten an den kurzlebigen Ports zulässt (1024-65535).

Hinweis: Es ist eine bewährte Methode, die folgenden Sicherheitsgruppenregeln für Ihren Application Load Balancer zu verwenden.

Wenn Sie die CloudWatch-Metrik TargetConnectionErrorCount mit der Summenstatistik überprüfen, werden Sie wahrscheinlich positive Datenpunkte sehen. Zum Beispiel die Anzahl der Verbindungen, die zwischen dem Load Balancer und dem Ziel nicht erfolgreich hergestellt wurden.

Weitere Informationen finden Sie unter Konfigurieren des Leerlauf-Timeouts mithilfe der Konsole.

Sicherstellen, dass Ihre Lambda-Funktion reagiert, bevor das Verbindungs-Timeout abläuft

Wenn Ihr Ziel eine Lambda-Funktion ist, überprüfen Sie die Dauer der Performance-Metrik mit maximalen Statistiken, um zu überprüfen, wie lange das Ereignis verarbeitet wird. Weitere Informationen finden Sie unter Verwenden von Leistungsmetriken.


Relevante Informationen

HTTP 504: Gateway-Timeout

Wie kann ich hohe Latenzzeiten bei meinem Application Load Balancer beheben?

Wie löse ich Probleme bei der Authentifizierungskonfiguration in meinem Application Load Balancer?

Wie behebe ich 504-Fehler bei der Verwendung eines Classic Load Balancer?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren