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 della mappa URL: a livello di bilanciatore del carico, a livello di dominio dell'URL e a livello di percorso dell'URL.
Le configurazioni di esempio si basano sui concetti e si basano sulle configurazioni descritte 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 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 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 denominato web-backend-service
. Se la richiesta riceve una risposta 4xx
, il criterio di risposta di errore personalizzato viene configurato per inviare la richiesta al servizio di errore e un oggetto di 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.gsutil cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Esporta la mappa URL (
web-map-http
) in un file denominatoweb-map-http.yaml
.gcloud beta 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.yaml
per aggiungere un criterio di risposta di errore personalizzato, come evidenziato nella seguente configurazione YAML. In questo esempio, un criterio di risposta di errore viene configurato a livello del 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 fare riferimento a questi oggetti in un bucket di backend collegato al bilanciatore del carico. I bucket Cloud Storage offrono un modo semplice per archiviare gli oggetti di errore e farli restituire ai client utilizzando il bilanciatore del carico. Tuttavia, puoi anche pubblicare le pagine di errore e gli asset correlati senza utilizzare un bucket di backend. Ad esempio, puoi utilizzare un servizio di backend che fa riferimento al backend di un gruppo di istanze VM con un server Apache configurato per pubblicare una pagina di risposta di errore personalizzata.
Aggiorna la mappa degli URL importando l'ultima configurazione da
web-map-http.yaml
.gcloud beta 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 il 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 da
not-found.html
vengono pubblicati e viene restituito un codice di stato HTTP404
.
Esempio 2: configurare una pagina di errore relativa a un codice di errore specifico per un host specifico
Questo esempio si basa sull'esempio precedente: Configura una pagina di errore per tutti gli errori 4xx
comuni a tutti gli host. Presuppone che sia già configurato un bilanciatore del carico in modo che le richieste all'host video.example.com
vengano instradate al servizio di backend denominato video-backend-service
. Se una richiesta non supera l'autorizzazione da parte del servizio di backend, il servizio restituisce una risposta 401 (Unauthorized)
. Il criterio di risposta di errore personalizzato viene configurato 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, è probabile che i contenuti dell'errore contengano link agli asset, ad esempio l'immagine del logo. Il client effettua richieste per gli asset a cui viene fatto riferimento nella pagina dell'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, archivia questi asset nello stesso bucket di backend specificato in defaultCustomErrorResponsePolicy
e aggiungi una regola per instradare le richieste dagli URL di 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 seguente configurazione.
pathMatchers: ... pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
Il criterio consente inoltre di definire il codice di risposta finale per la richiesta. In questo esempio, il codice di risposta è cambiato da 401
a 200
specificando il valore da overrideResponseCode
a 200
. Per tutti gli altri errori 4xx
, il contenuto dell'errore in not-found.html
viene restituito al client e il codice di risposta HTTP originale del servizio di backend viene conservato.
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 dell'URL.
Livello del criterio | Campo API | Abbina il codice di risposta HTTP | Servizio errori | Oggetto di errore restituito |
---|---|---|---|---|
Dominio dell'URL | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
Bilanciatore del carico | urlMaps.defaultCustomErrorResponsePolicy |
Tutte le 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
, segui questi passaggi:
Carica la pagina di errore HTML (
video-obtain-authorization.html
) e gli asset correlati (logo.svg
) nel bucket Cloud Storage.gsutil cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/ gsutil cp Desktop/logo.svg gs://GCS_BUCKET_NAME/assets/
Esporta la mappa URL (
web-map-http
) in un file denominatoweb-map-http.yaml
.gcloud beta 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 seguente configurazione YAML. In questo esempio, viene configurato un criterio di risposta agli errori personalizzato a livello del 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, per impostazione predefinita il servizio di errore a livello di dominio dell'URL utilizza il servizio di errore definito al livello superiore, ovvero al livello del 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 l'ultima configurazione da
web-map-http.yaml
.gcloud beta 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 il traffico all'indirizzo IP del bilanciatore del carico.
Invia all'host una richiesta di URL che richiede l'autorizzazione.
curl -I http://video.example.com/a-page-that-needs-authorization
I contenuti dell'errore da
video-obtain-authorization.html
vengono pubblicati e viene restituito un codice di stato HTTP200
.
Esempio 3: configurare criteri di risposta agli errori personalizzati granulari per domini, percorsi e codici di risposta di errore diversi
Questo esempio mostra come personalizzare risposte di errore specifiche per domini URL, percorsi URL e codici di risposta di errore HTTP diversi.
La configurazione personalizzata della risposta di errore, spiegata in questo esempio, presuppone quanto segue:
Hai configurato una mappa URL per un bilanciatore del carico delle applicazioni esterno con un host e il routing basato su percorsi come illustrato 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 personalizzati di risposta agli errori. 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 | Abbina il codice di risposta HTTP | Servizio errori | Oggetto di 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/* |
Tutte le 4xx | BUCKET-1 |
example-net-4xx.html |
Bilanciatore del carico | Any |
Tutti i formati 4xx o 5xx | BUCKET-1 |
error-page-generic.html |
Il criterio di risposta agli errori personalizzato a livello del bilanciatore del carico viene applicato solo se
il criterio soddisfa le condizioni di errore e non è stato definito alcun criterio di corrispondenza
per il codice di errore ai livelli inferiori, ovvero se il dominio o il percorso dell'URL corrisponde al dominio.
Analogamente, il criterio di risposta di errore personalizzato a livello di dominio dell'URL viene applicato solo se il criterio soddisfa le condizioni di errore e non è stato definito alcun criterio di corrispondenza per il codice di errore al livello inferiore, ovvero il percorso dell'URL. In questo esempio, se una richiesta all'URL www.example.net/video/hd
riceve una risposta 404
, viene restituito il file not-found-hd-videos-404.html
. Tuttavia, se viene ricevuta 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 agli errori personalizzati su tre livelli della mappa URL, procedi nel seguente modo:
Carica gli oggetti di errore nei bucket Cloud Storage.
gsutil cp Desktop/error-page-generic.html gs://GCS_BUCKET_1_NAME/ gsutil cp Desktop/example-net-4xx.html gs://GCS_BUCKET_1_NAME/ gsutil cp Desktop/not-found-sd-videos-404.html gs://GCS_BUCKET_2_NAME/ gsutil 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 beta 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-map
Modifica
video-org-url-map.yaml
per aggiungere criteri di risposta di errore personalizzati, come evidenziato nella seguente configurazione YAML.Poiché il servizio di errore non è definito a livello di dominio dell'URL, per impostazione predefinita il servizio di errore a livello di dominio dell'URL utilizza il servizio di errore definito al livello superiore, ovvero al livello del 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 l'ultima configurazione da
video-org-url-map.yaml
.gcloud beta 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 il 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
Vengono pubblicati i contenuti relativi all'errore di
example-net-4xx.html
.Allo stesso modo, verifica altri URL con domini degli URL e percorsi degli URL diversi.