Configurare risposte di errore personalizzate

Questo documento fornisce configurazioni di esempio di risposte di errore personalizzate. Prima del giorno Se configuri una risposta di errore personalizzata, leggi la Panoramica sulle risposte di errore personalizzate.

Le configurazioni di esempio descritte in questa pagina consentono di configurare un errore personalizzato criterio di risposta a tre livelli della risorsa mappa URL: il bilanciatore del carico , a livello di dominio dell'URL e a livello di percorso dell'URL.

Le configurazioni di esempio si basano su concetti sulle configurazioni descritte nei seguenti documenti:

Esempio 1: configurare una pagina di errore per tutti gli errori 4xx comuni a tutti gli host

Questo esempio presuppone che tu abbia configurato un carico come descritto in Configurare un bilanciatore del carico delle applicazioni esterno globale con istanza VM di backend.

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 è configurato in modo da 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:

  1. Carica la pagina di errore HTML (not-found.html) nel bucket Cloud Storage.

    gsutil cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
    
  2. Esporta la mappa URL (web-map-http) in un file denominato web-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
    
  3. Modifica web-map-http.yaml per aggiungere un criterio di risposta di errore personalizzato evidenziato nella seguente configurazione YAML, Sezione defaultCustomErrorResponsePolicy. In questo esempio, un errore il criterio di risposta è 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 file di Cloud Storage e fare riferimento a questi bucket da un bucket di backend collegato al carico con il bilanciatore del carico di rete passthrough esterno regionale. I bucket Cloud Storage offrono un modo semplice gli oggetti di errore e restituirli ai client utilizzando il comando con il bilanciatore del carico di rete passthrough esterno regionale. Tuttavia, Puoi anche pubblicare pagine di errore e asset correlati senza utilizzare un backend di sincronizzare la directory di una VM con un bucket. Ad esempio, puoi utilizzare un servizio di backend, che fa riferimento a una VM di un gruppo di istanze in cui è configurato un server Apache pagina di risposta agli errori.

  4. Aggiorna la mappa URL importando l'ultima configurazione da web-map-http.yaml.

    gcloud compute url-maps import web-map-http --source web-map-http.yaml
    
  5. Dopo aver aggiornato la mappa URL, devi attendere un po' di tempo prima di poter per 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
    

    Vengono pubblicati i contenuti dell'errore da not-found.html e un codice di stato HTTP 404 viene restituito.

Esempio 2: configurare una pagina di errore per un codice di errore specifico di un host specifico

Questo esempio si basa sul precedente: Configura una pagina di errore per tutti gli errori 4xx comuni a tutti gli host. Presuppone che un carico il bilanciatore è già configurato in modo tale che le richieste all'host video.example.com viene instradato al servizio di backend denominato video-backend-service. Se una richiesta non concede l'autorizzazione da parte del backend il servizio restituisce una risposta 401 (Unauthorized). L'errore personalizzato il criterio di risposta è configurato in modo da inviare la richiesta al servizio errori e viene restituito al client un oggetto errore (video-obtain-authorization.html).

Nella maggior parte dei casi, è probabile che i contenuti degli errori contengano link ad asset, ad esempio ad esempio l'immagine di un logo. Il cliente effettua richieste per gli asset a cui viene fatto riferimento nel pagina di errore e al bilanciatore del carico vengono inviate richieste aggiuntive per recuperarle. Il bilanciatore del carico risponde quindi alla richiesta e restituisce gli asset collegati. Questo si ottiene archiviando questi asset nello stesso bucket di backend specificato in defaultCustomErrorResponsePolicy e aggiunta di una regola per il routing richieste da URL di asset (ad esempio /assets/logo.svg) al backend di sincronizzare la directory di una VM con un bucket. La risposta del bilanciatore del carico alla richiesta di asset collegati non è una risposta di errore, ma una risposta normale, come illustrato nella configurazione seguente.

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 dovrebbe essere. In questo esempio, il codice di risposta è cambiato da 401 a 200 specificando il valore da overrideResponseCode a 200. Per tutti gli altri 4xx errori, il contenuto dell'errore in not-found.html viene restituito al client e viene conservato il codice di risposta HTTP originale del servizio di backend.

Come mostrato nella tabella seguente, due criteri di risposta di errore personalizzati sono configurate in questo esempio. Questi criteri vengono creati sul bilanciatore del carico e il livello del dominio dell'URL.

Livello delle norme Campo API Abbina il codice di risposta HTTP Servizio errori Oggetto errore restituito
Dominio dell'URL pathMatchers[].defaultCustomErrorResponsePolicy 401 CUSTOM_ERRORS_BUCKET video-obtain-authorization.html
Bilanciatore del carico urlMaps.defaultCustomErrorResponsePolicy Tutti i 4xx CUSTOM_ERRORS_BUCKET not-found.html

Creare un criterio di risposta di errore personalizzato per un codice di errore 401 per l'host video.example.com, segui questi passaggi:

  1. Carica la pagina dell'errore HTML (video-obtain-authorization.html) e la relativa pagina (logo.svg) al bucket Cloud Storage.

    gsutil cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/
    gsutil cp Desktop/logo.svg gs://GCS_BUCKET_NAME/assets/
    
  2. Esporta la mappa URL (web-map-http) in un file denominato web-map-http.yaml.

    gcloud compute url-maps export web-map-http --destination web-map-http.yaml
    
  3. Modifica web-map-http.yaml per aggiungere un criterio di risposta di errore personalizzato evidenziato nella seguente configurazione YAML, Sezione defaultCustomErrorResponsePolicy. In questo esempio, un errore personalizzato il criterio di risposta è configurato a livello del bilanciatore del carico (urlMaps.defaultCustomErrorResponsePolicy) e a livello di dominio dell'URL (pathMatchers[].defaultCustomErrorResponsePolicy).

    Poiché il servizio errori non è definito a livello di dominio dell'URL, l'errore a livello di dominio dell'URL utilizza per impostazione predefinita il servizio errori definito di livello superiore; cioè il 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
    
  4. Aggiorna la mappa URL importando l'ultima configurazione da web-map-http.yaml.

    gcloud compute url-maps import web-map-http --source web-map-http.yaml
    
  5. Dopo aver aggiornato la mappa URL, devi attendere un po' di tempo prima di poter per iniziare a inviare traffico all'indirizzo IP del bilanciatore del carico,

    Invia al tuo host una richiesta di un URL che richiede l'autorizzazione.

    curl -I http://video.example.com/a-page-that-needs-authorization
    

    Vengono pubblicati i contenuti dell'errore da video-obtain-authorization.html e viene restituito un HTTP Viene restituito il codice di stato 200.

Esempio 3: configurare criteri di risposta di errore personalizzati e 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 degli URL e codici di risposta di errore HTTP.

La configurazione personalizzata della risposta di errore, spiegata in questo esempio, presuppone che seguenti:

Come mostrato nella tabella seguente, quattro criteri di risposta agli errori personalizzati vengono configurate in questo esempio. Questi criteri vengono creati in tre diversi livelli nel seguente ordine di precedenza:

  1. Percorso dell'URL (pathMatchers[].pathRules[].customErrorResponsePolicy)
  2. Dominio dell'URL (pathMatchers[].defaultCustomErrorResponsePolicy)
  3. Bilanciatore del carico (urlMaps.defaultCustomErrorResponsePolicy)
Livello delle norme Richiedi URL Abbina il codice di risposta HTTP Servizio errori Oggetto 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 4xx BUCKET-1 example-net-4xx.html
Bilanciatore del carico Any Tutti i tipi di errori 4xx o 5xx BUCKET-1 error-page-generic.html

Il criterio di risposta agli errori personalizzato a livello di bilanciatore del carico viene applicato solo se Il criterio corrisponde alle condizioni di errore e non è stata definita alcuna norma corrispondente il codice di errore ai livelli inferiori; ossia il dominio dell'URL o il percorso dell'URL. Analogamente, viene applicato il criterio di risposta di errore personalizzato a livello di dominio URL. solo se il criterio corrisponde alle condizioni di errore e non è stata specificata definita per il codice di errore al livello inferiore; ossia il percorso dell'URL. In questo Ad esempio, se una richiesta all'URL www.example.net/video/hd rileva un 404 viene restituito il file not-found-hd-videos-404.html. Tuttavia, se è stata 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 agli errori personalizzati su tre livelli della mappa URL: segui questi passaggi:

  1. Caricare 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/
    
  2. Esporta la mappa URL (video-org-url-map) in un file denominato video-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-map
    
  3. Modifica video-org-url-map.yaml per aggiungere criteri di risposta di errore personalizzati come evidenziato nella seguente configurazione YAML, Sezione defaultCustomErrorResponsePolicy.

    Poiché il servizio errori non è definito a livello di dominio dell'URL, l'errore a livello di dominio dell'URL utilizza per impostazione predefinita il servizio errori definito di livello superiore; cioè il 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
    
  4. Aggiorna la mappa URL importando l'ultima configurazione da video-org-url-map.yaml.

    gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
    
  5. Dopo aver aggiornato la mappa URL, devi attendere un po' di tempo prima di poter per 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
    

    Vengono pubblicati i contenuti dell'errore da example-net-4xx.html.

    Analogamente, esegui il test per altri URL con domini e percorsi degli URL diversi.