Dieses Dokument enthält Beispielkonfigurationen von benutzerdefinierten Fehlerantworten. Bevor Sie eine benutzerdefinierte Fehlerantwort konfigurieren, lesen Sie die Übersicht über benutzerdefinierte Fehlerantworten.
Mit den auf dieser Seite beschriebenen Beispielkonfigurationen wird eine benutzerdefinierte Fehlerantwortrichtlinie auf drei Ebenen der URL-Zuordnungsressource konfiguriert: der Ebene des Load-Balancers, der URL-Domainebene und der URL-Pfadebene.
Die Beispielkonfigurationen basieren auf Konzepten und bauen auf Konfigurationen auf, die in den folgenden Dokumenten beschrieben werden:
- Globalen externen Application Load Balancer mit VM-Instanzgruppen-Backends einrichten
- Backend-Buckets erstellen
- Funktionsweise von URL-Zuordnungen
- URL-Zuordnungen konfigurieren
Beispiel 1: Fehlerseite für alle 4xx
-Fehler konfigurieren, die alle Hosts betreffen.
In diesem Beispiel wird davon ausgegangen, dass Sie einen Load Balancer eingerichtet haben, wie unter Globalen externen Application Load Balancer mit VM-Instanzgruppen-Back-Ends einrichten beschrieben.
In diesem Beispiel werden Anfragen an den Load-Balancer an den Backend-Dienst mit dem Namen web-backend-service
weitergeleitet. Wenn die Anfrage auf eine 4xx
-Antwort stößt, wird die benutzerdefinierte Fehlerantwortrichtlinie so konfiguriert, dass die Anfrage an den Fehlerdienst gesendet und ein Fehlerobjekt (not-found.html
) an den Client zurückgegeben wird.
So erstellen Sie eine benutzerdefinierte Fehlerantwortrichtlinie:
Laden Sie die HTML-Fehlerseite (
not-found.html
) in den Cloud Storage-Bucket hoch.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Exportieren Sie die URL-Zuordnung (
web-map-http
) in eine Datei mit dem Namenweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Bevor Sie die benutzerdefinierte Fehlerantwortrichtlinie hinzufügen, hat die URL-Zuordnung (
web-map-http
) eine Konfiguration ähnlich der folgenden.creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service fingerprint: d0eJJpCBpHg= kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
Bearbeiten Sie
web-map-http.yaml
, um eine benutzerdefinierte Richtlinie für Fehlerantworten hinzuzufügen, wie in der folgenden YAML-Konfiguration im AbschnittdefaultCustomErrorResponsePolicy
hervorgehoben. In diesem Beispiel wird eine Fehlerantwortrichtlinie auf Ebene des Load Balancers (urlMaps.defaultCustomErrorResponsePolicy
) konfiguriert.creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/not-found.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET fingerprint: d0eJJpCBpHg= kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
Wir empfehlen, alle Fehlerobjekte in einem Cloud Storage-Bucket zu speichern und über einen Backend-Bucket auf sie zu verweisen, der an Ihrem Load Balancer angehängt ist. Cloud Storage-Buckets bieten eine einfache Möglichkeit, Fehlerobjekte zu speichern und über den Load-Balancer an Ihre Clients zurückzugeben. Sie können jedoch auch Fehlerseiten und zugehörige Assets bereitstellen, ohne einen Back-End-Bucket zu verwenden. Sie können beispielsweise einen Back-End-Dienst verwenden, der auf ein VM-Instanzgruppen-Back-End mit einem Apache-Server verweist, der für die Bereitstellung einer benutzerdefinierten Fehlerantwortseite konfiguriert ist.
Aktualisieren Sie die URL-Zuordnung. Importieren Sie dazu die neueste Konfiguration aus
web-map-http.yaml
.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Nachdem Sie die URL-Zuordnung aktualisiert haben, müssen Sie einige Zeit warten, bevor Sie Traffic an die IP-Adresse des Load-Balancers senden können.
Senden Sie eine Anfrage für eine Seite, die nicht existiert.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
Der Fehlerinhalt von
not-found.html
wird bereitgestellt und der HTTP-Statuscode404
wird zurückgegeben.
Beispiel 2: Fehlerseite für einen bestimmten Fehlercode eines bestimmten Hosts konfigurieren
Dieses Beispiel baut auf dem vorherigen Beispiel auf: Fehlerseite für alle 4xx
-Fehler konfigurieren, die allen Hosts gemeinsam sind. Es wird davon ausgegangen, dass ein Load-Balancer bereits so konfiguriert ist, dass Anfragen an den Host video.example.com
an den Backend-Dienst mit dem Namen video-backend-service
weitergeleitet werden. Wenn die Autorisierung einer Anfrage durch den Back-End-Dienst fehlschlägt, gibt der Dienst eine 401 (Unauthorized)
-Antwort zurück. Die benutzerdefinierte Fehlerantwortrichtlinie ist so konfiguriert, dass die Anfrage an den Fehlerdienst gesendet und ein Fehlerobjekt (video-obtain-authorization.html
) an den Client zurückgegeben wird.
In den meisten Fällen enthält Ihr Fehlerinhalt wahrscheinlich Links zu Assets, z. B. ein Logobild. Der Client stellt Anfragen für Assets, auf die auf der Fehlerseite verwiesen wird. An den Load-Balancer werden zusätzliche Anfragen gesendet, um diese abzurufen.
Der Load-Balancer antwortet dann auf die Anfrage und gibt die verknüpften Assets zurück.
Dazu werden diese Assets im selben Back-End-Bucket gespeichert, der in defaultCustomErrorResponsePolicy
angegeben ist, und eine Regel zum Weiterleiten von Anfragen von Asset-URLs (z. B. /assets/logo.svg
) an den Back-End-Bucket hinzugefügt. Die Antwort des Load-Balancers auf die Anfrage für verknüpfte Assets ist keine Fehlerantwort, sondern eine normale Antwort, wie in der folgenden Konfiguration dargestellt.
pathMatchers: ... pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
Mit der Richtlinie können Sie auch festlegen, wie der endgültige Antwortcode für die Anfrage aussehen soll. In diesem Beispiel wurde der Antwortcode von 401
in 200
geändert, indem der Wert von overrideResponseCode
in 200
angegeben wurde. Bei allen anderen 4xx
-Fehlern wird der Fehlerinhalt in not-found.html
an den Client zurückgegeben und der ursprüngliche HTTP-Antwortcode des Backend-Dienstes bleibt erhalten.
Wie in der folgenden Tabelle dargestellt, werden in diesem Beispiel zwei benutzerdefinierte Fehlerantwortrichtlinien konfiguriert. Diese Richtlinien werden auf der Ebene des Load-Balancers und der URL-Domain erstellt.
Richtlinienebene | API-Feld | Übereinstimmung mit HTTP-Antwortcode | Fehlerdienst | Fehlerobjekt zurückgegeben |
---|---|---|---|---|
URL-Domain | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
Load-Balancer | urlMaps.defaultCustomErrorResponsePolicy |
Alle 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
So erstellen Sie eine benutzerdefinierte Fehlerantwortrichtlinie für den 401
-Fehlercode für den Host video.example.com
:
Laden Sie die HTML-Fehlerseite (
video-obtain-authorization.html
) und zugehörige Assets (logo.svg
) in den Cloud Storage-Bucket hoch.gcloud storage cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/ gcloud storage cp Desktop/logo.svg gs://GCS_BUCKET_NAME/assets/
Exportieren Sie die URL-Zuordnung (
web-map-http
) in eine Datei mit dem Namenweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Bearbeiten Sie
web-map-http.yaml
, um eine benutzerdefinierte Richtlinie für Fehlerantworten hinzuzufügen, wie in der folgenden YAML-Konfiguration im AbschnittdefaultCustomErrorResponsePolicy
hervorgehoben. In diesem Beispiel wird eine benutzerdefinierte Fehlerantwortrichtlinie auf der Load Balancer-Ebene (urlMaps.defaultCustomErrorResponsePolicy
) und der URL-Domainebene (pathMatchers[].defaultCustomErrorResponsePolicy
) konfiguriert.Da der Fehlerdienst nicht auf URL-Domainebene definiert ist, verwendet der Fehlerdienst auf URL-Domainebene standardmäßig den auf höherer Ebene definierten Fehlerdienst, also auf der Ebene des Load-Balancers.
creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/not-found.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET fingerprint: d0eJJpCBpHg= hostRules: - hosts: - video.example.com pathMatcher: path-matcher-1 kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-backend-service name: path-matcher-1 defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 401 path: "/video-obtain-authorization.html overrideResponseCode: 200 // The `errorService` in `pathMatchers[].defaultCustomErrorResponsePolicy` references the // error service configured in `urlMaps.defaultCustomErrorResponsePolicy`. // A URL map path rule to route requests from asset URLs (for example, "/assets/logo.svg") to the backend bucket. pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
Aktualisieren Sie die URL-Zuordnung. Importieren Sie dazu die neueste Konfiguration aus
web-map-http.yaml
.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Nachdem Sie die URL-Zuordnung aktualisiert haben, müssen Sie einige Zeit warten, bevor Sie Traffic an die IP-Adresse des Load-Balancers senden können.
Senden Sie eine Anfrage an Ihren Host, um eine URL zu autorisieren, die autorisiert werden muss.
curl -I http://video.example.com/a-page-that-needs-authorization
Der Fehlerinhalt von
video-obtain-authorization.html
wird bereitgestellt und der HTTP-Statuscode200
wird zurückgegeben.
Beispiel 3: Detaillierte benutzerdefinierte Richtlinien für Fehlerantworten für verschiedene Domains, Pfade und Fehlerantwortcodes konfigurieren
Dieses Beispiel zeigt, wie Sie bestimmte Fehlerantworten für verschiedene URL-Domains, URL-Pfade und HTTP-Fehlerantwortcodes anpassen können.
Bei der Konfiguration der benutzerdefinierten Fehlerantwort, die in diesem Beispiel erläutert wird, wird Folgendes vorausgesetzt:
Sie haben eine URL-Zuordnung für einen externen Application Load Balancer mit einem host- und pfadbasierten Routing konfiguriert, wie in der folgenden Abbildung dargestellt.
Sie haben zwei Back-End-Buckets mit den Namen
BUCKET_1
undBUCKET_2
konfiguriert, um die benutzerdefinierten Fehlerseiten zurückzugeben.
Wie in der folgenden Tabelle dargestellt, sind in diesem Beispiel vier benutzerdefinierte Fehlerantwortrichtlinien konfiguriert. Diese Richtlinien werden über drei Ebenen in der folgenden Rangfolge erstellt:
- URL-Pfad (
pathMatchers[].pathRules[].customErrorResponsePolicy
) - URL-Domain (
pathMatchers[].defaultCustomErrorResponsePolicy
) - Load Balancer (
urlMaps.defaultCustomErrorResponsePolicy
)
Richtlinienebene | URL beantragen | Übereinstimmung mit HTTP-Antwortcode | Fehlerdienst | Fehlerobjekt zurückgegeben |
---|---|---|---|---|
URL-Pfad | example.net/video/hd/* |
404 | BUCKET-2 |
not-found-hd-videos-404.html |
URL-Pfad | example.net/video/sd/* |
404 | BUCKET-2 |
not-found-sd-videos-404.html |
URL-Domain | example.net/* |
Alle 4xx | BUCKET-1 |
example-net-4xx.html |
Load-Balancer | Any |
Alle 4xx oder 5xx | BUCKET-1 |
error-page-generic.html |
Die benutzerdefinierte Fehlerantwortrichtlinie auf der Ebene des Load-Balancers wird nur angewendet, wenn die Richtlinie den Fehlerbedingungen entspricht und für den Fehlercode auf niedrigeren Ebenen, also der URL-Domain oder dem URL-Pfad, keine entsprechende Richtlinie definiert wurde.
Ebenso wird die benutzerdefinierte Fehlerantwortrichtlinie auf der Ebene der URL-Domain nur angewendet, wenn die Richtlinie den Fehlerbedingungen entspricht und für den Fehlercode auf einer niedrigeren Ebene, also dem URL-Pfad, keine übereinstimmende Richtlinie definiert wurde. Wenn in diesem Beispiel eine Anfrage an die URL www.example.net/video/hd
auf eine 404
-Antwort stößt, wird die Datei not-found-hd-videos-404.html
zurückgegeben. Wenn jedoch eine 404
-Antwort für eine Anfrage an die URL www.example.net/video/
festgestellt wird, wir die Datei example-net-4xx.html
zurückgegeben.
So erstellen Sie benutzerdefinierte Fehlerantwortrichtlinien auf drei Ebenen der URL-Zuordnung:
Fehlerobjekte in die Cloud Storage-Buckets hochladen
gcloud storage cp Desktop/error-page-generic.html gs://GCS_BUCKET_1_NAME/ gcloud storage cp Desktop/example-net-4xx.html gs://GCS_BUCKET_1_NAME/ gcloud storage cp Desktop/not-found-sd-videos-404.html gs://GCS_BUCKET_2_NAME/ gcloud storage cp Desktop/not-found-hd-videos-404.html gs://GCS_BUCKET_2_NAME/
Exportieren Sie die URL-Zuordnung (
video-org-url-map
) in eine Datei mit dem Namenvideo-org-url-map.yaml.
.gcloud compute url-maps export video-org-url-map --destination video-org-url-map.yaml
Bevor Sie die benutzerdefinierte Fehlerantwortrichtlinie hinzufügen, hat die URL-Zuordnung (
video-org-url-map
) eine Konfiguration, die der folgenden ähnelt.creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
Bearbeiten Sie
video-org-url-map.yaml
, um benutzerdefinierte Richtlinien für Fehlerantworten hinzuzufügen, wie im AbschnittdefaultCustomErrorResponsePolicy
der folgenden YAML-Konfiguration hervorgehoben.Da der Fehlerdienst nicht auf URL-Domainebene definiert ist, verwendet der Fehlerdienst auf URL-Domainebene standardmäßig den auf höherer Ebene definierten Fehlerdienst, also auf der Ebene des Load-Balancers.
creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx - 5xx path: '/error-page-generic.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/example-net-4xx.html' // The `errorService` in `pathMatchers[].defaultCustomErrorResponsePolicy` references the // error service configured in `urlMaps.defaultCustomErrorResponsePolicy`. pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd customErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 404 path: '/not-found-hd-videos-404.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-2 - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd customErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 404 path: '/not-found-sd-videos-404.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-2 selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
Aktualisieren Sie die URL-Zuordnung. Importieren Sie dazu die neueste Konfiguration aus
video-org-url-map.yaml
.gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
Nachdem Sie die URL-Zuordnung aktualisiert haben, müssen Sie einige Zeit warten, bevor Sie Traffic an die IP-Adresse des Load-Balancers senden können.
Senden Sie eine Anfrage für eine Seite, die nicht existiert.
curl -I http://example.net/a-page-that-does-not-exist
Der Fehlerinhalt von
example-net-4xx.html
wird bereitgestellt.Ebenso sollten Sie nach anderen URLs mit unterschiedlichen URL-Domains und URL-Pfaden suchen.