Questo documento fornisce esempi di configurazioni di risposte di errore personalizzate. Prima di configurare una risposta di errore personalizzata, leggi la panoramica delle risposte di errore personalizzate.
Le configurazioni di esempio descritte in questa pagina configurano una policy di risposta agli errori personalizzata a tre livelli della risorsa mappa URL: il livello del bilanciatore del carico, il livello del dominio URL e il livello del percorso URL.
Le configurazioni di esempio si basano su concetti e configurazioni descritti nei seguenti documenti:
- Configura un bilanciatore del carico delle applicazioni esterno globale con backend di gruppi di istanze VM
- Crea bucket di backend
- Come funzionano le mappe degli URL
- Configurare le mappe URL
Esempio 1: configura una pagina di errore per tutti gli errori 4xx comuni a tutti gli host
Questo esempio presuppone che tu abbia configurato un bilanciatore del carico come descritto in Configura un bilanciatore del carico delle applicazioni esterno globale con backend di gruppi di istanze VM.
In questo esempio, le richieste al bilanciatore del carico vengono indirizzate al servizio di backend
denominato web-backend-service. Se la richiesta rileva una risposta 4xx, la
policy di risposta agli errori personalizzata è configurata per inviare la richiesta al
servizio di gestione degli errori e al client viene restituito un oggetto di errore (not-found.html).
Per creare una policy di risposta di errore personalizzata:
Carica la pagina di errore HTML (
not-found.html) nel bucket Cloud Storage.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Esporta la mappa URL (
web-map-http) in un file denominatoweb-map-http.yaml.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Prima di aggiungere il criterio di risposta di errore personalizzato, la mappa URL (
web-map-http) ha una configurazione simile alla seguente.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
Modifica
web-map-http.yamlper aggiungere una policy di risposta di errore personalizzata come evidenziato nella seguente configurazione YAML, nella sezionedefaultCustomErrorResponsePolicy. In questo esempio, una norma di risposta agli errori è configurata a livello di bilanciatore del carico (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-httpTi consigliamo di archiviare tutti gli oggetti di errore in un bucket Cloud Storage e di farvi riferimento da un bucket di backend collegato al bilanciamento del carico. I bucket Cloud Storage offrono un modo semplice per archiviare gli oggetti di errore e farli restituire ai tuoi client utilizzando il bilanciamento del carico. Tuttavia, puoi anche pubblicare pagine di errore e asset correlati senza utilizzare un bucket di backend. Ad esempio, puoi utilizzare un servizio di backend che fa riferimento a un backend di gruppo di istanze VM con un server Apache configurato per pubblicare una pagina di risposta di errore personalizzata.
Aggiorna la mappa URL importando la configurazione più recente da
web-map-http.yaml.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Dopo aver aggiornato la mappa URL, devi attendere un po' di tempo prima di poter iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico.
Invia una richiesta per una pagina inesistente.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
Vengono pubblicati i contenuti di errore di
not-found.htmle viene restituito un codice di stato HTTP404.
Esempio 2: configura una pagina di errore per un codice di errore specifico per un host specifico
Questo esempio si basa su quello precedente: Configura una pagina di errore per
tutti gli errori 4xx comuni a tutti gli host. Presuppone che un bilanciatore del carico sia già configurato in modo che le richieste all'host video.example.com vengano indirizzate al servizio di backend denominato video-backend-service. Se una richiesta non viene autorizzata dal servizio di backend, il servizio restituisce una risposta 401 (Unauthorized). La policy di risposta di errore personalizzata è configurata per inviare la richiesta al servizio di errore e al client viene restituito un oggetto di errore (video-obtain-authorization.html).
Nella maggior parte dei casi, i contenuti dell'errore conterranno probabilmente link agli asset, ad esempio un'immagine del logo. Il client effettua richieste per gli asset a cui viene fatto riferimento nella
pagina di errore e vengono inviate richieste aggiuntive al bilanciatore del carico per recuperarli.
Il bilanciatore del carico risponde quindi alla richiesta e restituisce gli asset collegati.
A questo scopo, memorizza questi asset nello stesso bucket di backend specificato in defaultCustomErrorResponsePolicy e aggiungi una regola per indirizzare le richieste dagli URL degli asset (ad esempio, /assets/logo.svg) al bucket di backend. La risposta del bilanciatore del carico alla richiesta di asset collegati non è una risposta di errore, ma una risposta normale, come mostrato nella configurazione seguente.
pathMatchers:
...
pathRules:
- service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET
paths:
- /assets
La policy consente anche di definire quale deve essere il codice di risposta finale per la richiesta. In questo esempio, il codice di risposta è cambiato da 401 a 200
specificando il valore di overrideResponseCode come 200. Per tutti gli altri errori 4xx, i contenuti dell'errore in not-found.html vengono restituiti al client e il codice di risposta HTTP originale del servizio di backend viene mantenuto.
Come mostrato nella tabella seguente, in questo esempio sono configurate due norme di risposta agli errori personalizzate. Questi criteri vengono creati a livello di bilanciatore del carico e di dominio URL.
| Livello di policy | Campo API | Corrispondenza del codice di risposta HTTP | Servizio errori | Restituito oggetto di errore |
|---|---|---|---|---|
| Dominio dell'URL | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
| Bilanciatore del carico | urlMaps.defaultCustomErrorResponsePolicy |
Tutti gli errori 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
Per creare un criterio di risposta di errore personalizzato per un codice di errore 401 per l'host
video.example.com:
Carica la pagina di errore HTML (
video-obtain-authorization.html) e gli asset correlati (logo.svg) nel 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/
Esporta la mappa URL (
web-map-http) in un file denominatoweb-map-http.yaml.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Modifica
web-map-http.yamlper aggiungere una policy di risposta di errore personalizzata come evidenziato nella seguente configurazione YAML, nella sezionedefaultCustomErrorResponsePolicy. In questo esempio, una policy di risposta di errore personalizzata è configurata a livello di bilanciatore del carico (urlMaps.defaultCustomErrorResponsePolicy) e a livello di dominio URL (pathMatchers[].defaultCustomErrorResponsePolicy).Poiché il servizio di errore non è definito a livello di dominio URL, il servizio di errore a livello di dominio URL viene impostato per impostazione predefinita sul servizio di errore definito a livello superiore, ovvero a livello di bilanciatore del carico.
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: - /assetsAggiorna la mappa URL importando la configurazione più recente da
web-map-http.yaml.gcloud compute url-maps import web-map-http --source web-map-http.yaml
Dopo aver aggiornato la mappa URL, devi attendere un po' di tempo prima di poter iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico.
Invia una richiesta al tuo host per un URL che richiede l'autorizzazione.
curl -I http://video.example.com/a-page-that-needs-authorization
Vengono pubblicati i contenuti di errore di
video-obtain-authorization.htmle viene restituito un codice di stato HTTP200.
Esempio 3: configura policy di risposta di errore personalizzate granulari per domini, percorsi e codici di risposta di errore diversi
Questo esempio mostra come personalizzare risposte di errore specifiche per diversi domini URL, percorsi URL e codici di risposta di errore HTTP.
La configurazione della risposta di errore personalizzata, spiegata in questo esempio, presuppone quanto segue:
Hai configurato una mappa URL per un bilanciatore del carico delle applicazioni esterno con un routing basato su host e percorso, come illustrato nell'immagine seguente.
Esempio di configurazione del servizio di backend (fai clic per ingrandire) Hai configurato due bucket di backend denominati
BUCKET_1eBUCKET_2per restituire le pagine di errore personalizzate.
Come mostrato nella tabella seguente, in questo esempio sono configurate quattro policy di risposta di errore personalizzate. Queste policy vengono create su tre livelli nel seguente ordine di precedenza:
- Percorso dell'URL (
pathMatchers[].pathRules[].customErrorResponsePolicy) - Dominio URL (
pathMatchers[].defaultCustomErrorResponsePolicy) - Bilanciatore del carico (
urlMaps.defaultCustomErrorResponsePolicy)
| Livello di policy | Richiedi URL | Corrispondenza del codice di risposta HTTP | Servizio errori | Restituito oggetto di errore |
|---|---|---|---|---|
| Percorso dell'URL | example.net/video/hd/* |
404 | BUCKET-2 |
not-found-hd-videos-404.html |
| Percorso dell'URL | example.net/video/sd/* |
404 | BUCKET-2 |
not-found-sd-videos-404.html |
| Dominio dell'URL | example.net/* |
Tutti gli errori 4xx | BUCKET-1 |
example-net-4xx.html |
| Bilanciatore del carico | Any |
Tutti gli errori 4xx o 5xx | BUCKET-1 |
error-page-generic.html |
La policy di risposta di errore personalizzata a livello di bilanciatore del carico viene applicata solo se la policy corrisponde alle condizioni di errore e non è stata definita alcuna policy corrispondente per il codice di errore ai livelli inferiori, ovvero il dominio URL o il percorso URL.
Allo stesso modo, la policy di risposta agli errori personalizzata a livello di dominio URL viene applicata solo se la policy corrisponde alle condizioni di errore e non è stata definita alcuna policy corrispondente per il codice di errore a livello inferiore, ovvero il percorso URL. In questo
esempio, se una richiesta all'URL www.example.net/video/hd rileva una risposta 404, viene restituito il file not-found-hd-videos-404.html. Tuttavia, se
viene rilevata una risposta 404 per una richiesta all'URL www.example.net/video/,
viene restituito il file example-net-4xx.html.
Per creare policy di risposta agli errori personalizzate su tre livelli della mappa URL, segui questi passaggi:
Carica gli oggetti di errore nei bucket 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/
Esporta la mappa URL (
video-org-url-map) in un file denominatovideo-org-url-map.yaml.gcloud compute url-maps export video-org-url-map --destination video-org-url-map.yaml
Prima di aggiungere il criterio di risposta di errore personalizzato, la mappa URL (
video-org-url-map) ha una configurazione simile alla seguente.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-mapModifica
video-org-url-map.yamlper aggiungere policy di risposta di errore personalizzate come evidenziato nella seguente configurazione YAML, nella sezionedefaultCustomErrorResponsePolicy.Poiché il servizio di errore non è definito a livello di dominio URL, il servizio di errore a livello di dominio URL viene impostato per impostazione predefinita sul servizio di errore definito a livello superiore, ovvero a livello di bilanciatore del carico.
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-mapAggiorna la mappa URL importando la configurazione più recente da
video-org-url-map.yaml.gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
Dopo aver aggiornato la mappa URL, devi attendere un po' di tempo prima di poter iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico.
Invia una richiesta per una pagina inesistente.
curl -I http://example.net/a-page-that-does-not-exist
Vengono pubblicati i contenuti di errore di
example-net-4xx.html.Allo stesso modo, esegui il test per altri URL con domini e percorsi URL diversi.