Bei Anforderungen über einen Classic Load Balancer werden HTTP-502-Fehler ausgegeben. Wie kann ich diese Fehler beheben?

Zuletzt aktualisiert: 08.04.2022

Wenn mein Client über einen Classic Load Balancer (CLB) Anforderungen an eine Website stellt, werden HTTP-502-Fehler angezeigt. Wie kann ich das Problem beheben?

Kurzbeschreibung

HTTP-502- (Bad-Gateway-)Fehler können aus einem der folgenden Gründe auftreten:

  • Der Webserver oder die zugehörigen Backend-Anwendungsserver, die auf EC2-Instances ausgeführt werden, geben eine Nachricht zurück, die von Ihrem Classic Load Balancer nicht geparst werden kann.
  • Der Webserver oder die zugehörigen Backend-Anwendungsserver geben eine eigene 502-Fehlermeldung zurück.

So finden Sie die Quelle dieser 502-Fehler:

Wenn die Backend-Antwort die Quelle des ELB-502-Fehlers ist, kann das Problem folgende Ursachen haben:

  • Eine Antwort mit mehr als einem CRLF zwischen jedem Header.
  • Eine Antwort mit einem Content-Length-Header, der eine nicht ganzzahlige Zahl enthält.
  • Eine Antwort mit mehr Byte im Hauptteil als der Wert des Content-Length-Headers.

Wenn der 502-Fehler von Ihren Backend-Servern generiert wird, wenden Sie sich an den Besitzer Ihrer Anwendung. Wenn der Fehler 502 vom Classic Load Balancer generiert wird, ist die HTTP-Antwort vom Backend fehlerhaft. Befolgen Sie diese Schritte, um von ELB generierte 502-Fehler zu beheben:

Auflösung

1.    Überprüfen Sie, ob der von der Backend-Anwendung zurückgegebene Antworttext den HTTP-Spezifikationen entspricht, wie in den folgenden RFCs erwähnt:
RFC 7230 - HTTP/1.1: Nachrichtensyntax und Routing
RFC 7231 - HTTP/1.1: Semantik und Inhalt
RFC 7232 - HTTP/1.1: Bedingte Anforderungen
RFC 7233 - HTTP/1.1: Bereichsanforderungen
RFC 7234 - HTTP/1.1: Caching
RFC 7235 - HTTP/1.1: Authentifizierung

2.    Vergewissern Sie sich, dass der Antwortheader die richtige Syntax aufweist: einen Schlüssel und den Wert, z. B. Content-Type:text. Stellen Sie sicher, dass im HTTP-Antwortheader keine Inhaltslängen- oder Übertragungscodierung fehlt. Weitere Informationen zu HTTP-Headerfeldern des Webservers finden Sie unter Liste der HTTP-Headerfelder. Untersuchen Sie die zurückgegebenen HTTP-Antworten, indem Sie einen Befehl ähnlich dem folgenden ausführen:

curl -vko /dev/null server_instance_IP

3.    Überprüfen Sie das ELB-Zugriffsprotokoll auf doppelte HTTP-502-Fehler. 502-Fehler für elb_status_code und backend_status_code weisen darauf hin, dass ein Problem mit einer oder mehreren der Webserver-Instances vorliegt. Ermitteln Sie, welche Webserver-Instances das Problem aufweisen, und überprüfen Sie dann die Webserver-Protokolle der Backend-Webserver-Instances. Sehen Sie sich die folgenden Protokollspeicherorte für einige gängige Webserver und Betriebssysteme an:

Apache-Protokolle

  • Die Webserver-Protokolle für CentOS, RHEL, Fedora und Amazon Linux befinden sich im Verzeichnis /var/log/httpd/.
  • Die Webserver-Protokolle für Debian und Ubuntu Linux befinden sich in den Verzeichnissen /var/log/apache2 und /var/log/lighthttpd/.

NGINX-Protokolle

  • Der Speicherort des NGINX-Zugriffsprotokolls ist in der nginx.conf-Datei access_log /path/to/access.log definiert
  • Der Standardspeicherort ist /var/log/nginx/access.log

IIS-Protokolle

Die Webserver-Protokolle für Windows IIS 7, IIS 7.5 und IIS 8.0 werden im Verzeichnis inetpub\logs\Logfiles gespeichert. Weitere Informationen zu den Protokollen des Internet Information Server (IIS) finden Sie unter Der HTTP-Statuscode in IIS 7.0 und höher. Wenn Sie festgestellt haben, dass Ihre 502-Fehler ELB-generiert sind und die Antwort Ihres Backends den RFC-Konventionen entspricht, wenden Sie sich an den AWS Support.