Erstellen von angepassten Reaktionen auf Fehlermeldungen - Amazon CloudFront

Erstellen von angepassten Reaktionen auf Fehlermeldungen

Wenn ein Objekt, das Sie über CloudFront bereitstellen, nicht verfügbar ist, gibt Ihr Webserver in der Regel einen relevanten HTTP-Statuscode an CloudFront zurück, um dies anzugeben. Wenn ein Betrachter beispielsweise eine ungültige URL anfordert, gibt Ihr Webserver einen HTTP -404-Statuscode (Not found) an CloudFront zurück und CloudFront gibt diesen Statuscode an den Betrachter zurück.

Sie können CloudFront so konfigurieren, dass stattdessen eine benutzerdefinierte Fehlerantwort an den Betrachter zurückgegeben wird, wenn Sie möchten. Außerdem haben Sie mehrere Optionen, mit denen Sie verwalten können, wie CloudFront bei einem Fehler antwortet. Um Optionen für benutzerdefinierte Fehlermeldungen anzugeben, aktualisieren Sie Ihre CloudFront-Verteilung, um diese Werte festzulegen. Weitere Informationen finden Sie unter Konfigurieren von Fehlermeldungsverhalten.

Wenn Sie CloudFront so konfigurieren, dass eine benutzerdefinierte Fehlerseite für einen HTTP-Statuscode zurückgegeben wird, die benutzerdefinierte Fehlerseite jedoch nicht verfügbar ist, gibt CloudFront den Statuscode an den Betrachter zurück, den CloudFront vom Ursprung erhalten hat, der die benutzerdefinierten Fehlerseiten enthält. Nehmen wir beispielsweise an, Ihr benutzerdefinierter Ursprung gibt einen 500-Statuscode zurück und Sie haben CloudFront so konfiguriert, dass eine benutzerdefinierte Fehlerseite für einen 500-Statuscode von einem Amazon S3-Bucket abgerufen wird. Ein Benutzer hat jedoch versehentlich die benutzerdefinierte Fehlerseite aus Ihrem Bucket gelöscht. CloudFront gibt einen HTTP-404-Statuscode (Not Found) an den Betrachter zurück, der das Objekt angefragt hat.

Wenn CloudFront eine benutzerdefinierte Fehlerseite an einen Betrachter zurückgibt, bezahlen Sie die CloudFront-Standardgebühren für die benutzerdefinierte Fehlerseite und nicht die Gebühren für das angefragte Objekt. Weitere Informationen zu Gebühren für CloudFront finden Sie unter Amazon CloudFront – Preise.

Konfigurieren von Fehlermeldungsverhalten

Um benutzerdefinierte Fehlerantworten zu konfigurieren, können Sie die CloudFront-Konsole, die CloudFront-API oder verwende AWS CloudFormation. Unabhängig davon, wie Sie die Konfiguration aktualisieren, sollten Sie die folgenden Tipps und Empfehlungen beachten:

  • Speichern Sie die benutzerdefinierten Fehlerseiten an einem Speicherort, auf den CloudFront zugreifen kann. Wir empfehlen Ihnen, sie in einem Amazon-S3-Bucket zu speichern und sie nicht am selben Ort wie den Rest der Inhalte Ihrer Website oder Anwendung zu speichern. Wenn Sie die benutzerdefinierten Fehlerseiten am selben Ursprung wie Ihre Website oder Anwendung speichern und der Ursprung beginnt, 5xx-Fehler zurückzugeben, kann CloudFront die benutzerdefinierten Fehlerseiten nicht abrufen, da der Ursprungsserver nicht verfügbar ist. Weitere Informationen finden Sie unter Speichern von Objekten und benutzerdefinierte Fehlerseiten an anderen Speicherorten.

  • Stellen Sie sicher, dass CloudFront die Berechtigung hat, Ihre benutzerdefinierten Fehlerseiten zu erhalten. Wenn die benutzerdefinierten Fehlerseiten in Amazon S3 gespeichert sind, müssen die Seiten öffentlich zugänglich sein oder Sie müssen eine CloudFront-Ursprungszugriffssteuerung (Origin Access Control, OAC) konfigurieren. Wenn die benutzerdefinierten Fehlerseiten in einem benutzerdefinierten Ursprung gespeichert sind, müssen die Seiten öffentlich zugänglich sein.

  • (Optional) Konfigurieren Sie Ihren Ursprung so, dass ein Cache-Control- oder Expires-Header zusammen mit den benutzerdefinierten Fehlerseiten hinzugefügt wird, wenn Sie möchten. Sie können auch die Einstellung Error Caching Minimum TTL verwenden, um zu steuern, wie lange CloudFront die benutzerdefinierten Fehlerseiten zwischenspeichert. Weitere Informationen finden Sie unter Steuern, wie lange CloudFront Fehler zwischenspeichert.

Konfigurieren benutzerdefinierter Fehlerantworten (CloudFront-Konsole)

Um benutzerdefinierte Fehlerantworten in der CloudFront-Konsole zu konfigurieren, müssen Sie über eine CloudFront-Verteilung verfügen. In der Konsole stehen die Konfigurationseinstellungen für benutzerdefinierte Fehlerantworten nur für vorhandene Verteilungen zur Verfügung. Informationen zum Erstellen einer Verteilung finden Sie unter Erste Schritte mit einer einfachen CloudFront-Verteilung.

Konfigurieren benutzerdefinierter Fehlerantworten (Konsole)

  1. Melden Sie sich bei der AWS Management Console an, und öffnen Sie die Seite Verteilungen in der CloudFront-Konsole unter https://console.aws.amazon.com/cloudfront/v3/home#distributions.

  2. Wählen Sie in der Liste der Verteilungen die zu aktualisierende Verteilung aus.

  3. Wählen Sie die Registerkarte Fehlerseiten und wählen Sie dann Benutzerdefinierte Fehlerantwort erstellen.

  4. Geben Sie die entsprechenden Werte ein. Weitere Informationen finden Sie unter Benutzerdefinierte Fehlerseiten und Zwischenspeicherung von Fehlern im Thema Angegebene Werte beim Erstellen oder Aktualisieren einer Verteilung.

  5. Nachdem Sie die gewünschten Werte eingegeben haben, wählen Sie Erstellen.

Konfigurieren benutzerdefinierter Fehlerantworten (CloudFront-API oder AWS CloudFormation)

Um benutzerdefinierte Fehlerantworten mit der CloudFront-API oder AWS CloudFormation zu konfigurieren, verwenden Sie den CustomErrorResponse-Typ in einer Verteilung. Weitere Informationen finden Sie unter:

Erstellen einer benutzerdefinierten Fehlerseite für bestimmte HTTP-Statuscodes

Falls Sie es vorziehen, eine benutzerdefinierte Fehlermeldung anstatt der Standardmeldung anzuzeigen – zum Beispiel eine Seite mit der gleichen Formatierung wie der Rest der Website –, können Sie CloudFront so konfigurieren, dass ein Objekt (z. B. eine HTML-Datei) mit Ihrer benutzerdefinierten Fehlermeldung an den Betrachter zurückgegeben wird.

Um die Datei, die zurückgegeben werden soll, und die Fehler, bei denen die Datei zurückgegeben werden sollte, anzugeben, aktualisieren Sie Ihre CloudFront-Verteilung so, dass diese Werte angegeben werden. Weitere Informationen finden Sie unter Konfigurieren von Fehlermeldungsverhalten.

Zum Beispiel ist das Folgende eine benutzerdefinierte Fehlerseite:


				AWS 404-Seite

Sie können ein anderes Objekt für jeden unterstützten HTTP-Statuscode festlegen oder Sie können dasselbe Objekt für alle unterstützten Statuscodes verwenden. Es ist möglich, benutzerdefinierte Fehlerseiten für einige Statuscodes festzulegen und für andere nicht.

Die Objekte, die Sie über CloudFront bereitstellen, können aus vielen Gründen nicht verfügbar sein. Diese gliedern sich in zwei große Kategorien:

  • Client-Fehler weisen auf ein Problem mit der Anfrage hin. Beispielsweise ist ein Objekt mit dem angegebenen Namen nicht verfügbar oder der Benutzer verfügt nicht über die erforderlichen Berechtigungen, um ein Objekt in Ihrem Amazon S3-Bucket abzurufen. Wenn ein Client-Fehler auftritt, gibt der Ursprung einen HTTP-Statuscode im Bereich 4xx an CloudFront zurück.

  • Server-Fehler weisen auf ein Problem mit dem Ursprungs-Server hin. Beispielsweise ist der HTTP-Server ausgelastet oder nicht verfügbar. Wenn ein Server-Fehler auftritt, gibt Ihr Ursprungs-Server entweder einen HTTP-Statuscode im Bereich 5xx an CloudFront zurück oder CloudFront erhält für einen bestimmten Zeitraum keine Antwort von Ihrem Ursprungs-Server und geht von einem 504-Statuscode aus (Gateway Timeout).

Zu den HTTP-Statuscodes, für die CloudFront eine benutzerdefinierte Fehlerseite zurückgeben kann, gehören die folgenden:

  • 400, 403, 404, 405, 414, 416

    Anmerkung

    Sie können eine benutzerdefinierte Fehlerseite für HTTP-Statuscode 416 (Requested Range Not Satisfiable) erstellen und Sie können den HTTP-Statuscode ändern, den CloudFront an Betrachter zurückgibt, wenn Ihr Ursprung einen Statuscode 416 an CloudFront zurückgibt. (Weitere Informationen finden Sie unter Ändern der von CloudFront zurückgegebenen Antwortcodes.) CloudFront speichert jedoch keine Statuscode-416-Antworten zwischen. Selbst wenn Sie einen Wert für Error Caching Minimum TTL (Mindest-TTL für die Zwischenspeicherung von Fehlern) für Statuscode 416 festlegen, verwendet Cloudfront diesen jedoch nicht.

  • 500, 501, 502, 503, 504

    Anmerkung

    In einigen Fällen gibt CloudFront keine benutzerdefinierte Fehlerseite für den Statuscode HTTP 503 zurück, selbst wenn Sie CloudFront dafür konfigurieren. Wenn der CloudFront-Fehlercode Capacity Exceeded oder Limit Exceeded lautet, gibt CloudFront einen 503-Statuscode an den Betrachter zurück, ohne Ihre benutzerdefinierte Fehlerseite zu verwenden.

Eine detaillierte Erläuterung, wie CloudFront Fehlermeldungen von Ihrem Ursprung verarbeitet, finden Sie unter So verarbeitet CloudFront die HTTP-Statuscodes 4xx und 5xx von Ihrem Ursprung und speichert sie im Cache.

Speichern von Objekten und benutzerdefinierte Fehlerseiten an anderen Speicherorten

Wenn Sie Ihre Objekte und Ihre benutzerdefinierten Fehlerseiten an verschiedenen Orten speichern möchten, muss Ihre Verteilung ein Cache-Verhalten mit den folgenden Eigenschaften enthalten:

  • Der Wert von Path Pattern stimmt mit dem Pfad zu Ihren benutzerdefinierten Fehlermeldungen überein. Angenommen, Sie haben benutzerdefinierte Fehlerseiten für 4xx-Fehler in einem Amazon S3-Bucket in einem Verzeichnis mit dem Namen gespeicher /4xx-errors. Ihre Verteilung muss ein Cache-Verhalten beinhalten, für welches das Pfadmuster Anfragen für Ihre benutzerdefinierten Fehlerseiten an diesen Ort weiterleitet, z. B, /4xx-errors/*.

  • Der Wert von Origin legt den Wert von Origin ID für den Ursprung fest, der Ihre benutzerdefinierten Fehlerseiten enthält.

Weitere Informationen finden Sie Einstellungen für das Cache-Verhalten im Thema Werte, die Sie beim Erstellen oder Aktualisieren einer Verteilung angeben.

Ändern der von CloudFront zurückgegebenen Antwortcodes

Sie können CloudFront so konfigurieren, dass ein anderer HTTP-Statuscode an den Betrachter zurückgegeben wird als das, was CloudFront vom Ursprung erhalten hat. Wenn Ihr Ursprung beispielsweise einen 500-Statuscode an CloudFront zurückgibt, möchten Sie vielleicht, dass CloudFront eine benutzerdefinierte Fehlerseite und einen 200-Statuscode (OK) an den Betrachter zurückgibt. Es gibt eine Vielzahl von Gründen, aus denen Sie vielleicht möchten, dass CloudFront einen Statuscode an den Betrachter zurückgibt, der sich von demjenigen unterscheidet, den Ihr Ursprung an CloudFront zurückgegeben hat:

  • Einige Internetgeräte (beispielsweise einige Firewalls und Unternehmens-Proxys) fangen HTTP 4xx- und 5xx-Statuscodes ab und verhindern, dass die Antwort an den Betrachter zurückgegeben wird. Wenn Sie in diesem Szenario 200 ersetzen, wird die Antwort nicht abgefangen.

  • Wenn Sie keine Unterscheidung zwischen verschiedenen Client-Fehlern oder Server-Fehlern benötigen, können Sie 400 oder 500 als Wert festlegen, den CloudFront für alle 4xx- oder 5xx-Statuscodes zurückgibt.

  • Möglicherweise möchten Sie einen 200-Statuscode (OK) und eine statische Website zurückgeben, sodass Ihre Kunden nicht wissen, dass die Website nicht verfügbar ist.

Wenn Sie CloudFront-Standardprotokolle aktivieren und CloudFront so konfigurieren, dass der HTTP-Statuscode in der Antwort geändert wird, enthält der Wert in der sc-status-Spalte den Statuscode, den Sie angeben. Der Wert der x-edge-result-type-Spalte wird jedoch nicht beeinflusst. Sie enthält den Ergebnistyp der Antwort vom Ursprung. Nehmen wir beispielsweise an, Sie konfigurieren CloudFront so, dass der Statuscode 200 an den Betrachter zurückgegeben wird, wenn der Ursprung 404 (Not Found) an CloudFront zurückgibt. Wenn der Ursprung auf eine Anfrage mit dem Statuscode 404 antwortet, ist der Wert in der Spalte sc-status im Protokoll 200, der Wert in der Spalte x-edge-result-type jedoch Error.

Sie können CloudFront so konfigurieren, dass einer der folgenden HTTP-Statuscodes sowie eine benutzerdefinierte Fehlerseite zurückgegeben werden:

  • 200

  • 400, 403, 404, 405, 414, 416

  • 500, 501, 502, 503, 504

Steuern, wie lange CloudFront Fehler zwischenspeichert

Wenn Ihr Ursprung einen HTTP 4xx oder 5xx Statuscode zurückgibt, speichert CloudFront diese Fehlerantworten standardmäßig 10 Sekunden lang im Zwischenspeicher. CloudFront sendet dann die nächste Anforderung für das Objekt an Ihren Ursprung, um festzustellen, ob das Problem, das den Fehler verursacht hat, behoben wurde und das angeforderte Objekt jetzt verfügbar ist.

Anmerkung

Sie können eine benutzerdefinierte Fehlerseite für HTTP-Statuscode 416 (Requested Range Not Satisfiable) erstellen und Sie können den HTTP-Statuscode ändern, den CloudFront an Betrachter zurückgibt, wenn Ihr Ursprung einen Statuscode 416 an CloudFront zurückgibt. (Weitere Informationen finden Sie unter Ändern der von CloudFront zurückgegebenen Antwortcodes.) CloudFront speichert jedoch keine Statuscode-416-Antworten zwischen. Selbst wenn Sie einen Wert für Error Caching Minimum TTL (Mindest-TTL für die Zwischenspeicherung von Fehlern) für Statuscode 416 festlegen, verwendet Cloudfront diesen jedoch nicht.

Sie können die Zwischenspeicherungsdauer für Fehler – die Error Caching Minimum TTL – für jeden 4xx- und 5xx-Statuscode angeben, den CloudFront zwischenspeichert. Wenn Sie eine Dauer angeben, beachten Sie Folgendes:

  • Wenn Sie eine kurze Zwischenspeicherungsdauer für Fehler festlegen, leitet CloudFront mehr Anfragen an Ihren Ursprung weiter, als wenn Sie eine längere Dauer festlegen. Bei 5xx-Fehlern verschlimmert dies möglicherweise das Problem, das ursprünglich dazu geführt hat, dass Ihr Ursprung einen Fehler zurückgibt.

  • Wenn Ihr Ursprung einen Fehler für ein Objekt zurückgibt, beantwortet CloudFront Anfragen für das Objekt entweder mit der Fehlermeldung oder mit der benutzerdefinierten Fehlerseite, bis die Zwischenspeicherungsdauer für Fehler abgelaufen ist. Wenn Sie eine lange Zwischenspeicherungsdauer für Fehler festlegen, beantwortet CloudFront Anfragen möglicherweise noch lange, nachdem das Objekt wieder verfügbar wurde, mit einer Fehlermeldung oder der benutzerdefinierten Fehlerseite.

Wenn Sie steuern möchten, wie lange CloudFront Fehler für einzelne Objekte zwischenspeichert, können Sie Ihren Ursprungs-Server so konfigurieren, dass der entsprechende Header zur Fehlermeldung für dieses Objekt hinzugefügt wird:

  • Wenn der Ursprung eine Cache-Control: max-age- oder Cache-Control: s-maxage-Richtlinie oder einen Expires-Header hinzufügt:

    CloudFront speichert Fehlermeldungen für den Wert im Header oder von Error Caching Minimum TTL (Mindest-TTL für die Zwischenspeicherung von Fehlern) (je nachdem, welcher Wert höher ist) zwischen.

    Beachten Sie, dass die Werte für Cache-Control: max-age und Cache-Control: s-maxage nicht größer sein können als der Maximum TTL-Wert, der für das Cache-Verhalten festgelegt wurde, für das die Fehlerseite abgerufen wird.

  • Wenn der Ursprung andere Cache-Control-Richtlinien hinzufügt oder keine Header hinzufügt:

    CloudFront zwischenspeichert Fehlerantworten für den Wert von Error Caching Minimum TTL (Mindest-TTL für die Zwischenspeicherung von Fehlern).

Wenn die Ablaufzeit für einen 4xx- oder 5xx-Statuscode für ein Objekt länger ist, als Sie warten möchten, und das Objekt wieder verfügbar ist, können Sie den zwischengespeicherten Fehlercode mit der URL des angefragten Objekts aufheben. Wenn Ihr Ursprung eine Fehlermeldung für mehrere Objekte zurückgibt, müssen Sie die Gültigkeit aller Objekte einzeln aufheben. Weitere Informationen zur Aufhebung der Gültigkeit von Objekten finden Sie unter Aufheben der Gültigkeit von Dateien.