Wie behebe ich einen Fehler 502: „Die Anfrage konnte nicht erfüllt werden“ von CloudFront?
Ich habe eine Amazon-CloudFront-Distribution mit einer benutzerdefinierten Domäne konfiguriert. Wenn ich die alternative Canonical-Name-Record-Domäne (CNAME) über CloudFront anfordere, erhalte ich eine 502-Fehlerantwort mit der Meldung „Die Anfrage konnte nicht erfüllt werden.“
Kurzbeschreibung
Ein 502-Fehler tritt auf, wenn CloudFront keine Verbindung zum Ursprung herstellen kann. In den folgenden Abschnitten werden die Ursachen des Fehlers und die Problembehandlung beschrieben.
Lösung
CloudFront kann keine TCP-Verbindung mit dem Ursprungsserver herstellen
Standardmäßig stellt CloudFront über Port 80 (für HTTP) und Port 443 (für HTTPS) eine Verbindung zum Ursprung her. Wenn der Ursprung keinen Datenverkehr über diese Ports zulässt oder die Verbindung der CloudFront-IP-Adresse blockiert, schlägt die TCP-Verbindung fehl. Der Fehler führt zu einem 502-Fehler. Vergewissern Sie sich, dass die Protokolleinstellung der CloudFront-Verteilung auf den richtigen Port für HTTP- oder HTTPS-Verbindungen eingestellt ist, um das Problem zu beheben.
Führen Sie zum Testen der Konnektivität den folgenden Befehl aus:
telnet ORIGIN_DOMAIN/ORIGIN_IP PORT
Hinweis: Geben Sie für ORIGIN_DOMAIN die ID Ihrer Ursprungs-Domain ein. Geben Sie für ORIGIN_IP die IP-Adresse Ihres Ursprungs ein. Geben Sie für PORT die Portnummer ein, die Sie für die Verbindung mit dem Ursprung verwenden.
SSL-/TLS-Aushandlung mit dem Ursprungsserver ist fehlgeschlagen
Wenn die SSL/TLS-Transaktion fehlschlägt, schlägt die Verbindung zwischen CloudFront und dem Ursprung fehl und erzeugt einen 502-Fehler. In den folgenden Abschnitten werden die Ursachen für einen SSL/TLS-Transaktionsfehler und deren Behebung beschrieben.
SSL-Zertifikat stimmt nicht mit dem Domänennamen überein
Das SSL-Zertifikat am Ursprung muss einen der folgenden Domainnamen enthalten oder abdecken:
- Der Name der Ursprungs-Domäne im Feld Common Name oder Subject Alternative Names des Zertifikats.
- Der Domänenname des Host-Headers für eingehende Viewer-Host-Header, die in der CloudFront-Distribution an den Ursprung weitergeleitet werden.
Führen Sie den folgenden Befehl aus, um im Zertifikat nach Common Name und Subject Alternative Names zu suchen:
$ openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep -E '(CN|Alternative)' -A 2
Hinweis: Geben Sie für DOMAIN den Namen der Ursprungs-Domain ein. Geben Sie für SERVER_DOMAIN den Namen der Ursprungs-Domäne ein. Oder, wenn der Viewer-Host-Header an den Ursprung weitergeleitet wird, geben Sie für SERVER_DOMAIN den Wert des eingehenden Host-Headers ein.
Wenn Folgendes zutrifft, konfigurieren Sie die Cache- oder Ursprungs-Anforderungsrichtlinie so, dass sie den Host-Header einschließt:
- Der allgemeine Name oder das Speichernetzwerk (SAN) des SSL-Zertifikats enthält den Viewer-Host-Header-Wert.
- Der Host-Header wird nicht an den Ursprung weitergeleitet.
Ursprungs-Zertifikat ist abgelaufen, nicht vertrauenswürdig oder selbstsigniert
Das auf dem benutzerdefinierten Ursprung installierte Zertifikat muss von einer vertrauenswürdigen Zertifizierungsstelle signiert sein. Die von CloudFront vertrauenswürdigen Zertifizierungsstellen finden Sie in der Mozilla-Included-CA-Zertifikatsliste auf der Mozilla-Website.
CloudFront unterstützt keine selbstsignierten Zertifikate für SSL, die mit dem Ursprung eingerichtet wurden. Selbstsignierte Zertifikate werden von den Organisationen selbst ausgestellt oder lokal auf einem Webserver generiert, anstatt von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt zu werden.
Führen Sie den folgenden OpenSSL-Befehl aus, um zu überprüfen, ob Ihr Ursprungszertifikat abgelaufen ist. Suchen Sie in der Ausgabe nach den Parametern Not Before und Not After. Vergewissern Sie sich, dass das aktuelle Datum und die aktuelle Uhrzeit innerhalb der Gültigkeitsdauer des Zertifikats liegen.
$ openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep Validity -A 3
Hinweis: Geben Sie für DOMAIN den Namen der Ursprungs-Domain ein. Geben Sie für SERVER_DOMAIN den Namen der Ursprungs-Domäne ein. Oder, wenn der Viewer-Host-Header an den Ursprung weitergeleitet wird, geben Sie für SERVER_DOMAIN den Wert des eingehenden Host-Headers ein.
Fehlende Zwischenzertifikate der Zertifizierungsstelle oder die falsche Reihenfolge von Zwischenzertifikaten führen zu einem Fehler zwischen der HTTPS-Kommunikation und dem Ursprung. Führen Sie den folgenden Befehl aus, um die Zertifikatskette zu überprüfen.
$ openssl s_client -showcerts -connect DOMAIN:443 -servername SERVER_DOMAIN
Hinweis: Geben Sie für DOMAIN den Namen der Ursprungs-Domäne und für SERVER_DOMAIN den Namen der Ursprungs-Domäne ein. Oder, wenn der Viewer-Host-Header an den Ursprung weitergeleitet wird, geben Sie für SERVER_DOMAIN den Wert des eingehenden Host-Headers ein.
Die Chiffre-Suite des Ursprungs wird von CloudFront nicht unterstützt
Die SSL/TLS-Transaktion zwischen CloudFront und Ursprung schlägt fehl, wenn es keine gemeinsame ausgehandelte Chiffre-Suite gibt. Informationen zur Bestätigung, dass Sie die richtige Chiffre-Suite verwenden, finden Sie unter Unterstützte Protokolle und Chiffren zwischen CloudFront und dem Ursprung.
Sie können auch ein SSL-Servertest-Tool verwenden, um zu überprüfen, ob Ihr Ursprungs-Domainname in der Liste der unterstützten Chiffren enthalten ist.
CloudFront kann die ursprüngliche IP-Adresse nicht auflösen
Wenn CloudFront die Ursprungs-Domäne nicht auflösen kann, dann wird der Fehler 502 zurückgegeben. Um dies zu beheben, verwenden Sie einen dig/nslookup-Befehl, um zu überprüfen, ob die Ursprungs-Domäne in eine IP aufgelöst wird.
Linux:
$ dig ORIGIN_DOMAIN_NAME
Windows:
nslookup ORIGIN_DOMAIN_NAME
Hinweis: Geben Sie für ORIGIN_DOMAIN_NAME den Namen der Ursprungs-Domäne ein.
Bei Erfolg gibt der Befehl die IP des ursprünglichen Domänennamens zurück. Verwenden Sie ein DNS-Checker-Tool, um die DNS-Auflösung in verschiedenen Regionen zu überprüfen.
Der Fehler wird durch den Upstream-Ursprung verursacht
Der in der CloudFront-Verteilung definierte benutzerdefinierte Ursprung kann ein Proxy, ein Content-Delivery-Network-Hostname (CDN) oder ein mit dem tatsächlichen Ursprung verbundener Load Balancer sein. Wenn einer dieser zwischengeschalteten Dienste keine Verbindung zum Ursprung herstellen kann, dann wird ein 502-Fehler an CloudFront zurückgegeben. Wenden Sie sich an Ihren Dienstanbieter, um dieses Problem zu lösen.
Die mit der CloudFront-Distribution verknüpfte Lambda@Edge-Funktion ist bei der Validierung fehlgeschlagen
Wenn die Lambda@Edge-Funktion eine Antwort an CloudFront zurückgibt, die nicht gültig ist, dann gibt CloudFront einen 502-Fehler zurück. Überprüfen Sie Ihre Lambda@Edge-Funktion auf die folgenden häufig auftretenden Probleme, um dieses Problem zu beheben:
- Zurückgegebenes JSON-Objekt
- Fehlende Pflichtfelder
- Ungültiges Objekt in der Antwort
- Hinzufügen oder Aktualisieren von unzulässigen oder schreibgeschützten Headern
- Überschreitung der maximalen Körpergröße
- Ungültige Zeichen oder Werte
Weitere Informationen finden Sie unter Lambda@Edge-Funktionen testen und debuggen.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren