Questo documento fornisce configurazioni di esempio 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 un criterio di risposta agli errori personalizzato a tre livelli della risorsa mappa URL: a livello di bilanciatore del carico, a livello di dominio URL e a livello di percorso dell'URL.
Le configurazioni di esempio si basano sui concetti e sulle configurazioni di base descritte nei seguenti documenti:
- Configura un bilanciatore del carico delle applicazioni esterno globale con backend di gruppi di istanze VM
- Crea i bucket di backend
- Come funzionano le mappe di URL
- Configurare le mappe di 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 Configurare 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 instradate al servizio di backend chiamato web-backend-service
. Se la richiesta rileva una risposta 4xx
, il criterio di risposta agli errori personalizzato è configurato per inviare la richiesta al servizio di errori e un oggetto errore (not-found.html
) viene restituito al client.
Per creare un criterio di risposta di errore personalizzato:
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 degli 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.yaml
per aggiungere un criterio di risposta di errore personalizzato come evidenziato nella sezionedefaultCustomErrorResponsePolicy
della seguente configurazione YAML. In questo esempio, un criterio di risposta agli errori è configurato 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-http
Ti consigliamo di archiviare tutti gli oggetti di errore in un bucket Cloud Storage e di fare riferimento a un bucket di backend collegato al bilanciatore del carico. I bucket Cloud Storage ti consentono di archiviare facilmente gli oggetti di errore e di restituirli ai tuoi clienti utilizzando il bilanciamento del carico. Tuttavia, puoi anche pubblicare pagine di errore e asset correlati senza utilizzare un bucket backend. Ad esempio, puoi utilizzare un servizio di backend che fa riferimento a un backend del gruppo di istanze VM con un server Apache configurato per pubblicare una pagina di risposta agli errori 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 degli 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 che non esiste.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
I contenuti dell'errore di
not-found.html
vengono pubblicati e 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 sull'esempio precedente Configurare una pagina di errore per tutti gli errori 4xx
comuni a tutti gli host. Si presume che un bilanciatore del carico sia già configurato in modo che le richieste all'hostvideo.example.com
vengano inoltrate al servizio di backend denominatovideo-backend-service
. Se l'autorizzazione di una richiesta da parte del servizio di backend non va a buon fine, il servizio restituisce una risposta 401 (Unauthorized)
. La regola di risposta di errore personalizzata è configurata per inviare la richiesta al servizio di errore e un oggetto errore (video-obtain-authorization.html
) viene restituito al client.
Nella maggior parte dei casi, i contenuti dell'errore potrebbero contenere link ad asset, ad esempio un'immagine del logo. Il client invia richieste per gli asset a cui si fa riferimento nella pagina di errore e altre richieste vengono inviate al bilanciatore del carico per recuperarli.
Il bilanciatore del carico risponde quindi alla richiesta e restituisce le risorse collegate.
Questo viene ottenuto archiviando questi asset nello stesso bucket di backend
specificato in defaultCustomErrorResponsePolicy
e aggiungendo una regola per instradare
le richieste dagli URL delle risorse (ad es. /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
Il criterio ti consente anche di definire il codice di risposta finale per la richiesta. In questo esempio, il codice di risposta è passato da 401
a 200
specificando il valore overrideResponseCode
per 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 configurati due criteri di risposta agli errori personalizzati. Questi criteri vengono creati a livello di bilanciatore del carico e di dominio URL.
Livello del criterio | Campo API | Corrispondenza del codice di risposta HTTP | Servizio errori | Oggetto dell'errore restituito |
---|---|---|---|---|
Dominio dell'URL | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
Bilanciatore del carico | urlMaps.defaultCustomErrorResponsePolicy |
Tutti i codici 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
Per creare un criterio di risposta di errore personalizzato per un codice di errore 401
per l'hostvideo.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.yaml
per aggiungere un criterio di risposta di errore personalizzato come evidenziato nella sezionedefaultCustomErrorResponsePolicy
della seguente configurazione YAML. In questo esempio, un criterio di risposta agli errori personalizzato è configurato a livello di bilanciatore del carico (urlMaps.defaultCustomErrorResponsePolicy
) e a livello di dominio dell'URL (pathMatchers[].defaultCustomErrorResponsePolicy
).Poiché il servizio di errore non è definito a livello di dominio dell'URL, il servizio di errore a livello di dominio dell'URL è predefinito come 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: - /assets
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 degli URL, devi attendere un po' di tempo prima di poter iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico.
Invia una richiesta all'host per un URL che richiede l'autorizzazione.
curl -I http://video.example.com/a-page-that-needs-authorization
I contenuti dell'errore di
video-obtain-authorization.html
vengono pubblicati e viene restituito un codice di stato HTTP200
.
Esempio 3: configura criteri di risposta di errore personalizzati 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 personalizzata agli errori, 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 mostrato nell'immagine seguente.
Hai configurato due bucket di backend denominati
BUCKET_1
eBUCKET_2
per restituire le pagine di errore personalizzate.
Come mostrato nella tabella seguente, in questo esempio sono configurati quattro criteri di risposta agli errori personalizzati. Questi criteri vengono creati su tre livelli nel seguente ordine di precedenza:
- Percorso dell'URL (
pathMatchers[].pathRules[].customErrorResponsePolicy
) - Dominio dell'URL (
pathMatchers[].defaultCustomErrorResponsePolicy
) - Bilanciatore del carico (
urlMaps.defaultCustomErrorResponsePolicy
)
Livello del criterio | Richiedi URL | Corrispondenza del codice di risposta HTTP | Servizio errori | Oggetto dell'errore restituito |
---|---|---|---|---|
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 i codici 4xx | BUCKET-1 |
example-net-4xx.html |
Bilanciatore del carico | Any |
Tutti i codici 4xx o 5xx | BUCKET-1 |
error-page-generic.html |
Il criterio di risposta di errore personalizzato a livello di load balancer viene applicato solo se il criterio corrisponde alle condizioni di errore e non è stato definito alcun criterio di corrispondenza per il codice di errore ai livelli inferiori, ovvero il dominio dell'URL o il percorso dell'URL.
Analogamente, il criterio di risposta agli errori personalizzato a livello di dominio URL viene applicato
solo se corrisponde alle condizioni di errore e non è stato definito un criterio corrispondente per il codice di errore a livello inferiore, ovvero il percorso dell'URL. In questo
esempio, se una richiesta all'URL www.example.net/video/hd
genera 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 criteri di risposta di errore personalizzati in tre livelli della mappa URL:
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 di 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-map
Modifica
video-org-url-map.yaml
per aggiungere criteri di risposta di errore personalizzati come evidenziato nella sezionedefaultCustomErrorResponsePolicy
della seguente configurazione YAML.Poiché il servizio di errore non è definito a livello di dominio dell'URL, il servizio di errore a livello di dominio dell'URL è predefinito come 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-map
Aggiorna 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 degli 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 che non esiste.
curl -I http://example.net/a-page-that-does-not-exist
I contenuti dell'errore di
example-net-4xx.html
vengono pubblicati.Analogamente, verifica la presenza di altri URL con domini e percorsi URL diversi.