Wie behebe ich HTTP 502-Fehler, wenn ich Anfragen über einen Classic Load Balancer stelle?

Letzte Aktualisierung: 29.08.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. Weitere Informationen finden Sie in der folgenden Dokumentation von RFC Editor:
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 Content-Length- oder Übertragungscodierung fehlt. Weitere Informationen zu HTTP-Headerfeldern des Webservers finden Sie in der Dokumentation der Internet Assigned Numbers Authority 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 in der Dokumentation von Microsoft 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.