Ce document fournit des exemples de configurations de réponses d'erreur personnalisées. Avant de configurer une réponse d'erreur personnalisée, consultez la page Présentation des réponses d'erreur personnalisées.
Les exemples de configuration décrits sur cette page permettent de configurer une stratégie de réponse d'erreur personnalisée à trois niveaux de la ressource de mappage d'URL : au niveau de l'équilibreur de charge, au niveau du domaine de l'URL et au niveau du chemin d'URL.
Les exemples de configurations s'appuient sur des concepts et des configurations décrits dans les documents suivants :
- Configurer un équilibreur de charge d'application externe global avec des backends de groupe d'instances de VM.
- Créer des buckets backend
- Fonctionnement des mappages d'URL
- Configurer des mappages d'URL
Exemple 1 : Configurer une page d'erreur pour toutes les erreurs 4xx
communes à tous les hôtes
Cet exemple suppose que vous avez configuré un équilibreur de charge comme décrit dans la section Configurer un équilibreur de charge d'application externe global avec des backends de groupe d'instances de VM.
Dans cet exemple, les requêtes adressées à l'équilibreur de charge sont acheminées vers le service de backend nommé web-backend-service
. Si la requête rencontre une réponse 4xx
, la stratégie de réponse d'erreur personnalisée est configurée pour envoyer la requête au service d'erreur, et un objet d'erreur (not-found.html
) est renvoyé au client.
Pour créer une stratégie de réponse d'erreur personnalisée, procédez comme suit :
Importez la page d'erreur HTML (
not-found.html
) dans le bucket Cloud Storage.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Exportez le mappage d'URL (
web-map-http
) dans un fichier nomméweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Avant d'ajouter la règle de réponse aux erreurs personnalisée, le mappage d'URL (
web-map-http
) présente une configuration semblable à la suivante.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
Modifiez
web-map-http.yaml
pour ajouter une règle de réponse aux erreurs personnalisée, comme indiqué dans la configuration YAML suivante, dans la sectiondefaultCustomErrorResponsePolicy
. Dans cet exemple, une stratégie de réponse d'erreur est configurée au niveau de l'équilibreur de charge (urlMaps.defaultCustomErrorResponsePolicy
).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
Nous vous recommandons de stocker tous vos objets d'erreur dans un bucket Cloud Storage et de les référencer par un bucket backend associé à votre équilibreur de charge. Les buckets Cloud Storage vous permettent de stocker facilement vos objets d'erreur et de les renvoyer à vos clients à l'aide de l'équilibreur de charge. Toutefois, vous pouvez également diffuser des pages d'erreur et des éléments associés sans utiliser de bucket backend. Par exemple, vous pouvez utiliser un service de backend faisant référence à un backend de groupe d'instances de VM doté d'un serveur Apache configuré pour diffuser une page de réponse d'erreur personnalisée.
Mettez à jour le mappage d'URL en important la dernière configuration depuis
web-map-http.yaml
.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Après avoir mis à jour le mappage d'URL, vous devez attendre un certain temps avant de pouvoir commencer à envoyer du trafic vers l'adresse IP de votre équilibreur de charge.
Envoyez une requête pour une page qui n'existe pas.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
Le contenu d'erreur de
not-found.html
est diffusé et un code d'état HTTP404
est renvoyé.
Exemple 2 : Configurer une page d'erreur pour un code d'erreur spécifique pour un hôte spécifique
Cet exemple s'appuie sur l'exemple précédent : Configurer une page d'erreur pour toutes les erreurs 4xx
communes à tous les hôtes. Nous partons ici du principe qu'un équilibreur de charge est déjà configuré de sorte que les requêtes adressées à l'hôte video.example.com
soient acheminées vers le service de backend nommé video-backend-service
. Si une requête échoue l'autorisation du service de backend, le service renvoie une réponse 401 (Unauthorized)
. La stratégie de réponse d'erreur personnalisée est configurée pour envoyer la requête au service d'erreur, et un objet d'erreur (video-obtain-authorization.html
) est renvoyé au client.
Dans la plupart des cas, votre contenu d'erreur est susceptible de contenir des liens vers des éléments, par exemple une image de logo. Le client envoie des requêtes pour les éléments référencés sur la page d'erreur, et des requêtes supplémentaires sont envoyées à l'équilibreur de charge pour les récupérer.
L'équilibreur de charge répond ensuite à la requête et renvoie les éléments associés.
Pour ce faire, stockez ces éléments dans le même bucket backend spécifié dans defaultCustomErrorResponsePolicy
et ajoutez une règle pour acheminer les requêtes des URL d'éléments (par exemple, /assets/logo.svg
) vers le bucket backend. La réponse de l'équilibreur de charge à la requête pour les éléments associés n'est pas une réponse d'erreur, mais une réponse normale, comme illustré dans la configuration suivante.
pathMatchers: ... pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
La règle vous permet également de définir le code de réponse final de la requête. Dans cet exemple, le code de réponse est passé de 401
à 200
en spécifiant la valeur de overrideResponseCode
à 200
. Pour toutes les autres erreurs 4xx
, le contenu de l'erreur dans not-found.html
est renvoyé au client, et le code de réponse HTTP d'origine du service de backend est conservé.
Comme indiqué dans le tableau suivant, deux stratégies de réponse d'erreur personnalisées sont configurées dans cet exemple. Ces règles sont créées au niveau de l'équilibreur de charge et au niveau du domaine d'URL.
Niveau de la stratégie | Champ de l'API | Correspond au code de réponse HTTP | Service d'erreur | Objet d'erreur renvoyé |
---|---|---|---|---|
Domaine d'URL | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
Équilibreur de charge | urlMaps.defaultCustomErrorResponsePolicy |
Tous les 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
Pour créer une stratégie de réponse d'erreur personnalisée pour un code d'erreur 401
pour l'hôte video.example.com
, procédez comme suit :
Importez la page d'erreur HTML (
video-obtain-authorization.html
) et les éléments associés (logo.svg
) dans le bucket Cloud Storage.gcloud storage cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/ gcloud storage cp Desktop/logo.svg gs://GCS_BUCKET_NAME/assets/
Exportez le mappage d'URL (
web-map-http
) dans un fichier nomméweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Modifiez
web-map-http.yaml
pour ajouter une règle de réponse aux erreurs personnalisée, comme indiqué dans la configuration YAML suivante, dans la sectiondefaultCustomErrorResponsePolicy
. Dans cet exemple, une stratégie de réponse d'erreur personnalisée est configurée au niveau de l'équilibreur de charge (urlMaps.defaultCustomErrorResponsePolicy
) et au niveau du domaine d'URL (pathMatchers[].defaultCustomErrorResponsePolicy
).Comme le service d'erreur n'est pas défini au niveau du domaine d'URL, le service d'erreur au niveau du domaine d'URL est défini par défaut sur le service d'erreur défini au niveau supérieur, c'est-à-dire au niveau de l'équilibreur de charge.
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
Mettez à jour le mappage d'URL en important la dernière configuration à partir de
web-map-http.yaml
.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Après avoir mis à jour le mappage d'URL, vous devez attendre un certain temps avant de pouvoir commencer à envoyer du trafic vers l'adresse IP de votre équilibreur de charge.
Envoyez une requête à votre hôte pour obtenir une URL nécessitant une autorisation.
curl -I http://video.example.com/a-page-that-needs-authorization
Le contenu d'erreur de
video-obtain-authorization.html
est diffusé et un code d'état HTTP200
est renvoyé.
Exemple 3 : Configurer des stratégies de réponse d'erreur personnalisées précises pour différents domaines, chemins et codes de réponse d'erreur
Cet exemple montre comment personnaliser des réponses d'erreur spécifiques pour différents domaines d'URL, chemins d'URL et codes de réponse d'erreur HTTP.
La configuration de réponse d'erreur personnalisée, expliquée dans cet exemple, suppose ce qui suit :
Vous avez configuré un mappage d'URL pour un équilibreur de charge d'application externe avec un routage basé sur l'hôte et le chemin d'accès, comme illustré dans l'image suivante.
Vous avez configuré deux buckets backend nommés
BUCKET_1
etBUCKET_2
pour renvoyer les pages d'erreur personnalisées.
Comme indiqué dans le tableau suivant, quatre stratégies de réponse d'erreur personnalisées sont configurées dans cet exemple. Ces règles sont créées sur trois niveaux dans l'ordre de priorité suivant :
- Chemin de l'URL (
pathMatchers[].pathRules[].customErrorResponsePolicy
) - Domaine d'URL (
pathMatchers[].defaultCustomErrorResponsePolicy
) - Équilibreur de charge (
urlMaps.defaultCustomErrorResponsePolicy
)
Niveau de la stratégie | URL de la requête | Correspond au code de réponse HTTP | Service d'erreur | Objet d'erreur renvoyé |
---|---|---|---|---|
Chemin de l'URL | example.net/video/hd/* |
404 | BUCKET-2 |
not-found-hd-videos-404.html |
Chemin de l'URL | example.net/video/sd/* |
404 | BUCKET-2 |
not-found-sd-videos-404.html |
Domaine d'URL | example.net/* |
Tous les 4xx | BUCKET-1 |
example-net-4xx.html |
Équilibreur de charge | Any |
Tout les 4xx ou 5xx | BUCKET-1 |
error-page-generic.html |
La stratégie de réponse d'erreur personnalisée au niveau de l'équilibreur de charge n'est appliquée que si elle correspond aux conditions d'erreur et qu'aucune règle de correspondance n'a été définie pour le code d'erreur aux niveaux inférieurs, c'est-à-dire le domaine de l'URL ou le chemin d'URL.
De même, la stratégie de réponse d'erreur personnalisée au niveau du domaine de l'URL n'est appliquée que si la règle correspond aux conditions d'erreur et qu'aucune règle de correspondance n'a été définie pour le code d'erreur au niveau inférieur, c'est-à-dire le chemin de l'URL. Dans cet exemple, si une requête adressée à l'URL www.example.net/video/hd
rencontre une réponse 404
, le fichier not-found-hd-videos-404.html
est renvoyé. Toutefois, si une réponse 404
est rencontrée pour une requête adressée à l'URL www.example.net/video/
, le fichier example-net-4xx.html
est renvoyé.
Pour créer des stratégies de réponse d'erreur personnalisées sur trois niveaux du mappage d'URL, procédez comme suit :
Importez les objets d'erreur dans les buckets Cloud Storage.
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/
Exportez le mappage d'URL (
video-org-url-map
) dans un fichier nommévideo-org-url-map.yaml.
.gcloud compute url-maps export video-org-url-map --destination video-org-url-map.yaml
Avant d'ajouter la règle de réponse aux erreurs personnalisée, le mappage d'URL (
video-org-url-map
) présente une configuration semblable à la suivante.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
Modifiez
video-org-url-map.yaml
pour ajouter des règles de réponse aux erreurs personnalisées, comme indiqué dans la configuration YAML suivante, dans la sectiondefaultCustomErrorResponsePolicy
.Comme le service d'erreur n'est pas défini au niveau du domaine d'URL, le service d'erreur au niveau du domaine d'URL est défini par défaut sur le service d'erreur défini au niveau supérieur, c'est-à-dire au niveau de l'équilibreur de charge.
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
Mettez à jour le mappage d'URL en important la dernière configuration à partir de
video-org-url-map.yaml
.gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
Après avoir mis à jour le mappage d'URL, vous devez attendre un certain temps avant de pouvoir commencer à envoyer du trafic vers l'adresse IP de votre équilibreur de charge.
Envoyez une requête pour une page qui n'existe pas.
curl -I http://example.net/a-page-that-does-not-exist
Le contenu d'erreur de
example-net-4xx.html
est diffusé.De même, testez d'autres URL avec des domaines d'URL et des chemins d'URL différents.