En este documento, se proporcionan configuraciones de ejemplo de respuestas de error personalizadas. Antes de configurar una respuesta de error personalizada, lee la descripción general de la respuesta de error personalizada.
En las opciones de configuración de ejemplo que se describen en esta página, se configura una política de respuesta de error personalizada en tres niveles del recurso de mapa de URL: el nivel del balanceador de cargas, el nivel de dominio de URL y el nivel de ruta de URL. .
Los parámetros de configuración de ejemplo se basan en los conceptos y se basan en los parámetros de configuración descritos en los siguientes documentos:
- Configura un balanceador de cargas de aplicaciones externo global con backends de grupos de instancias de VM
- Crea buckets de backend
- Cómo funcionan los mapas de URL
- Configura mapas de URL
Ejemplo 1: Configura una página de error para todos los errores 4xx
comunes a todos los hosts
En este ejemplo, se supone que configuraste un balanceador de cargas como se describe en Configura un balanceador de cargas de aplicaciones externo global con backends de grupos de instancias de VM.
En este ejemplo, las solicitudes al balanceador de cargas se enrutan al servicio de backend llamado web-backend-service
. Si la solicitud encuentra una respuesta 4xx
, la política de respuesta de error personalizada se configura para enviar la solicitud al servicio de error y se muestra un objeto de error (not-found.html
) al cliente.
Para crear una política de respuesta de error personalizada, sigue estos pasos:
Sube la página de error de HTML (
not-found.html
) al bucket de Cloud Storage.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Exporta el mapa de URL (
web-map-http
) a un archivo llamadoweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Antes de agregar la política de respuesta de error personalizada, el mapa de URL (
web-map-http
) tiene una configuración similar a la siguiente.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
Edita
web-map-http.yaml
para agregar una política de respuesta de error personalizada, como se destaca en la siguiente configuración de YAML, en la seccióndefaultCustomErrorResponsePolicy
. En este ejemplo, se configura una política de respuesta de error a nivel del balanceador de cargas (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
Te recomendamos que almacenes todos tus objetos de error en un bucket de Cloud Storage y que un bucket de backend conectado a tu equilibrador de carga haga referencia a ellos. Los buckets de Cloud Storage ofrecen una forma sencilla de almacenar tus objetos de error y hacer que se muestren a tus clientes mediante el balanceador de cargas. Sin embargo, también puedes entregar páginas de error y elementos relacionados sin usar un bucket de backend. Por ejemplo, puedes usar un servicio de backend, que hace referencia a un backend de grupo de instancias de VM que tiene un servidor Apache configurado para entregar una página de respuesta de error personalizada.
Para actualizar el mapa de URL, importa la configuración más reciente desde
web-map-http.yaml
.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Después de actualizar el mapa de URL, debes esperar un tiempo antes de comenzar a enviar tráfico a la dirección IP del balanceador de cargas.
Envía una solicitud para una página que no existe.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
Se entrega el contenido de error de
not-found.html
y se muestra un código de estado HTTP404
.
Ejemplo 2: Configura una página de error para un código de error específico para un host específico
Este ejemplo se basa en el anterior: Configura una página de error para todos los errores 4xx
comunes a todos los hosts. Se supone que un balanceador de cargas ya está configurado de modo que las solicitudes al host video.example.com
se enruten al servicio de backend llamado video-backend-service
. Si una solicitud falla con la autorización del servicio de backend, el servicio muestra una respuesta 401 (Unauthorized)
. La política de respuesta de error personalizada está configurada para enviar la solicitud al servicio de error y se muestra un objeto de error (video-obtain-authorization.html
) al cliente.
En la mayoría de los casos, es probable que el contenido de error contenga vínculos a elementos, por ejemplo, una imagen de logotipo. El cliente realiza solicitudes para los recursos a los que se hace referencia en la página de error, y se envían solicitudes adicionales al balanceador de cargas para recuperarlos.
El balanceador de cargas responde a la solicitud y muestra los elementos vinculados.
Para ello, se almacenan estos recursos en el mismo bucket de backend especificado en defaultCustomErrorResponsePolicy
y se agrega una regla para enrutar las solicitudes de las URLs de los recursos (por ejemplo, /assets/logo.svg
) al bucket de backend. . La respuesta del balanceador de cargas a la solicitud de recursos vinculados no es una respuesta de error, sino una respuesta normal, como se muestra en la siguiente configuración.
pathMatchers: ... pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
La política también te permite definir cuál debe ser el código de respuesta final para la solicitud. En este ejemplo, el código de respuesta cambió de 401
a 200
mediante la especificación del valor de overrideResponseCode
a 200
. Para todos los demás errores 4xx
, el contenido de error en not-found.html
se muestra al cliente y se conserva el código de respuesta HTTP original del servicio de backend.
Como se muestra en la siguiente tabla, se configuran dos políticas de respuesta de error personalizadas en este ejemplo. Estas políticas se crean a nivel del balanceador de cargas y de los dominios de URL.
Nivel de política | Campo de API | Código de respuesta HTTP de coincidencia | Error de servicio | Objeto de error mostrado |
---|---|---|---|---|
Dominio de URL | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
Balanceador de cargas | urlMaps.defaultCustomErrorResponsePolicy |
Todos los 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
Si deseas crear una política de respuesta de error personalizada para un código de error 401
en el host video.example.com
, sigue estos pasos:
Sube la página de error de HTML (
video-obtain-authorization.html
) y los elementos relacionados (logo.svg
) al bucket de 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/
Exporta el mapa de URL (
web-map-http
) a un archivo llamadoweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Edita
web-map-http.yaml
para agregar una política de respuesta de error personalizada, como se destaca en la siguiente configuración de YAML, en la seccióndefaultCustomErrorResponsePolicy
. En este ejemplo, se configura una política de respuesta de error personalizada a nivel del balanceador de cargas (urlMaps.defaultCustomErrorResponsePolicy
) y del dominio de la URL (pathMatchers[].defaultCustomErrorResponsePolicy
).Como el servicio de error no se define a nivel del dominio de la URL, el servicio de error a nivel del dominio de la URL se establece de forma predeterminada en el servicio de error definido en el nivel superior, es decir, el nivel del balanceador de cargas.
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
Para actualizar el mapa de URL, importa la configuración más reciente desde
web-map-http.yaml
.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Después de actualizar el mapa de URL, debes esperar un tiempo antes de comenzar a enviar tráfico a la dirección IP del balanceador de cargas.
Envía una solicitud al host de una URL que requiera autorización.
curl -I http://video.example.com/a-page-that-needs-authorization
Se entrega el contenido de error de
video-obtain-authorization.html
y se muestra un código de estado HTTP200
.
Ejemplo 3: Configura políticas de respuesta de error personalizadas y detalladas para diferentes dominios, rutas de acceso y códigos de respuesta de error
En este ejemplo, se muestra cómo personalizar respuestas de error específicas para diferentes dominios URL, rutas de URL y códigos de respuesta de error de HTTP.
La configuración de respuesta de error personalizada, que se explica en este ejemplo, supone lo siguiente:
Configuraste un mapa de URL para un balanceador de cargas de aplicaciones externo con un enrutamiento basado en host y ruta de acceso, como se muestra en la siguiente imagen.
Configuraste dos buckets de backend llamados
BUCKET_1
yBUCKET_2
para mostrar las páginas de error personalizadas.
Como se muestra en la siguiente tabla, se configuran cuatro políticas de respuesta de error personalizadas en este ejemplo. Estas políticas se crean en tres niveles en el siguiente orden de prioridad:
- Ruta de URL (
pathMatchers[].pathRules[].customErrorResponsePolicy
) - Dominio de URL (
pathMatchers[].defaultCustomErrorResponsePolicy
) - Balanceador de cargas (
urlMaps.defaultCustomErrorResponsePolicy
)
Nivel de política | Solicitar URL | Código de respuesta HTTP de coincidencia | Error de servicio | Objeto de error mostrado |
---|---|---|---|---|
Ruta de URL | example.net/video/hd/* |
404 | BUCKET-2 |
not-found-hd-videos-404.html |
Ruta de URL | example.net/video/sd/* |
404 | BUCKET-2 |
not-found-sd-videos-404.html |
Dominio de URL | example.net/* |
Todos los 4xx | BUCKET-1 |
example-net-4xx.html |
Balanceador de cargas | Any |
Todos los 4xx o 5xx | BUCKET-1 |
error-page-generic.html |
La política de respuesta de error personalizada en el nivel de balanceador de cargas se aplica solo si la política coincide con las condiciones de error y no se definió una política coincidente para el código de error en los niveles inferiores. es decir, el dominio de URL o la ruta de URL.
Del mismo modo, la política de respuesta de error personalizada en el nivel de dominio URL se aplica solo si la política coincide con las condiciones de error y no se definió ninguna política coincidente para el código de error en el nivel inferior; es decir, la ruta de URL. En este ejemplo, si una solicitud a la URL www.example.net/video/hd
encuentra una respuesta 404
, se muestra el archivo not-found-hd-videos-404.html
. Sin embargo, si se encuentra una respuesta 404
para una solicitud a la URL www.example.net/video/
, se muestra el archivo example-net-4xx.html
.
Para crear políticas de respuesta de error personalizadas en tres niveles del mapa de URL, sigue estos pasos:
Sube los objetos con errores a los buckets de 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/
Exporta el mapa de URL (
video-org-url-map
) a un archivo llamadovideo-org-url-map.yaml.
.gcloud compute url-maps export video-org-url-map --destination video-org-url-map.yaml
Antes de agregar la política de respuesta de error personalizada, el mapa de URL (
video-org-url-map
) tiene una configuración similar a la siguiente.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
Edita
video-org-url-map.yaml
para agregar políticas de respuesta de error personalizadas, como se destaca en la siguiente configuración de YAML, en la seccióndefaultCustomErrorResponsePolicy
.Como el servicio de error no se define a nivel del dominio de la URL, el servicio de error a nivel del dominio de la URL se establece de forma predeterminada en el servicio de error definido en el nivel superior, es decir, el nivel del balanceador de cargas.
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
Para actualizar el mapa de URL, importa la configuración más reciente desde
video-org-url-map.yaml
.gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
Después de actualizar el mapa de URL, debes esperar un tiempo antes de comenzar a enviar tráfico a la dirección IP del balanceador de cargas.
Envía una solicitud para una página que no existe.
curl -I http://example.net/a-page-that-does-not-exist
Se entrega el contenido de error de
example-net-4xx.html
.Del mismo modo, prueba otras URLs con diferentes dominios y rutas de URL.