Mengonfigurasi respons error kustom

Dokumen ini memberikan contoh konfigurasi respons error kustom. Sebelum mengonfigurasi respons error kustom, baca Ringkasan respons error kustom.

Contoh konfigurasi yang dijelaskan di halaman ini mengonfigurasi kebijakan respons error kustom di tiga level resource peta URL—level load balancer, tingkat domain URL, dan tingkat jalur URL.

Contoh konfigurasi menggunakan konsep dan dibuat berdasarkan penyiapan yang dijelaskan dalam dokumen berikut:

Contoh 1: Mengonfigurasi halaman error untuk semua error 4xx yang umum pada semua host

Contoh ini mengasumsikan bahwa Anda telah menyiapkan load balancer seperti yang dijelaskan dalam Menyiapkan Load Balancer Aplikasi eksternal global dengan backend grup instance VM.

Dalam contoh ini, permintaan ke load balancer dirutekan ke layanan backend yang bernama web-backend-service. Jika permintaan menemukan respons 4xx, kebijakan respons error kustom dikonfigurasi untuk kemudian mengirim permintaan ke layanan error, dan objek error (not-found.html) akan ditampilkan ke klien.

Untuk membuat kebijakan respons error kustom, ikuti langkah-langkah berikut:

  1. Upload halaman error HTML (not-found.html) ke bucket Cloud Storage.

    gsutil cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
    
  2. Ekspor peta URL (web-map-http) ke dalam file bernama web-map-http.yaml.

    gcloud beta compute url-maps export web-map-http --destination web-map-http.yaml
    

    Sebelum Anda menambahkan kebijakan respons error kustom, peta URL (web-map-http) memiliki konfigurasi yang mirip dengan berikut ini.

    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. Edit web-map-http.yaml untuk menambahkan kebijakan respons error kustom seperti yang ditandai dalam konfigurasi YAML berikut. Dalam contoh ini, kebijakan respons error dikonfigurasi di level load balancer (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
    

    Sebaiknya simpan semua objek error di bucket Cloud Storage dan jadikan objek tersebut direferensikan oleh bucket backend yang dilampirkan ke load balancer Anda. Bucket Cloud Storage menyediakan cara mudah bagi Anda untuk menyimpan objek error dan menampilkannya ke klien menggunakan load balancer. Namun, Anda juga dapat menampilkan halaman error dan aset terkait tanpa menggunakan bucket backend. Misalnya, Anda dapat menggunakan layanan backend, yang mereferensikan backend grup instance VM dengan server Apache yang dikonfigurasi untuk menayangkan halaman respons error kustom.

  4. Perbarui peta URL dengan mengimpor konfigurasi terbaru dari web-map-http.yaml.

    gcloud beta compute url-maps import web-map-http --source web-map-http.yaml
    
  5. Setelah memperbarui peta URL, Anda harus menunggu beberapa saat sebelum dapat mulai mengirimkan traffic ke alamat IP load balancer.

    Mengirim permintaan untuk halaman yang tidak ada.

    curl -I http://IP_ADDRESS/a-page-that-does-not-exist
    

    Konten error dari not-found.html ditayangkan dan kode status HTTP 404 ditampilkan.

Contoh 2: Mengonfigurasi halaman error untuk kode error tertentu pada host tertentu

Contoh ini dibuat berdasarkan contoh sebelumnya—Mengonfigurasi halaman error untuk semua error 4xx yang umum pada semua host. Diasumsikan bahwa load balancer sudah dikonfigurasi sedemikian rupa sehingga permintaan ke video.example.com host dirutekan ke layanan backend yang bernama video-backend-service. Jika permintaan gagal diotorisasi oleh layanan backend, layanan akan menampilkan respons 401 (Unauthorized). Kebijakan respons error kustom dikonfigurasikan untuk mengirim permintaan ke layanan error, dan objek error (video-obtain-authorization.html) ditampilkan ke klien.

Pada umumnya, konten error Anda kemungkinan akan berisi link ke aset, misalnya gambar logo. Klien membuat permintaan untuk aset yang dirujuk di halaman error, dan permintaan tambahan akan dikirim ke load balancer untuk mengambilnya. Load balancer tersebut kemudian akan merespons permintaan dan menampilkan aset tertaut. Hal ini dilakukan dengan menyimpan aset-aset tersebut di bucket backend yang sama yang ditentukan di defaultCustomErrorResponsePolicy dan menambahkan aturan untuk merutekan permintaan dari URL aset (misalnya, /assets/logo.svg) ke bucket backend. Respons load balancer terhadap permintaan untuk aset tertaut bukanlah respons error, melainkan respons normal, seperti yang ditunjukkan dalam konfigurasi berikut.

pathMatchers:
...
  pathRules:
  - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET
    paths:
    - /assets

Kebijakan ini juga memungkinkan Anda menentukan kode respons akhir untuk permintaan tersebut. Dalam contoh ini, kode respons telah diubah dari 401 menjadi 200 dengan menentukan nilai overrideResponseCode menjadi 200. Untuk semua error 4xx lainnya, konten error di not-found.html akan ditampilkan ke klien, dan kode respons HTTP asli dari layanan backend dipertahankan.

Seperti ditunjukkan dalam tabel berikut, dua kebijakan respons error kustom dikonfigurasi dalam contoh ini. Kebijakan ini dibuat di level load balancer dan tingkat domain URL.

Tingkat kebijakan Kolom API Cocokkan kode respons HTTP Layanan error Objek error ditampilkan
Domain URL pathMatchers[].defaultCustomErrorResponsePolicy 401 CUSTOM_ERRORS_BUCKET video-obtain-authorization.html
Load balancer urlMaps.defaultCustomErrorResponsePolicy Semua 4xx CUSTOM_ERRORS_BUCKET not-found.html

Guna membuat kebijakan respons error kustom untuk kode error 401 bagi host video.example.com, ikuti langkah-langkah berikut:

  1. Upload halaman error HTML (video-obtain-authorization.html) dan aset terkait (logo.svg) ke 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. Ekspor peta URL (web-map-http) ke dalam file bernama web-map-http.yaml.

    gcloud beta compute url-maps export web-map-http --destination web-map-http.yaml
    
  3. Edit web-map-http.yaml untuk menambahkan kebijakan respons error kustom seperti yang ditandai dalam konfigurasi YAML berikut. Dalam contoh ini, kebijakan respons error kustom dikonfigurasi di level load balancer (urlMaps.defaultCustomErrorResponsePolicy) dan tingkat domain URL (pathMatchers[].defaultCustomErrorResponsePolicy).

    Karena layanan error tidak ditentukan di tingkat domain URL, layanan error di tingkat domain URL akan ditetapkan secara default ke layanan error yang ditentukan di tingkat yang lebih tinggi; yaitu, di level load balancer.

    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. Perbarui peta URL dengan mengimpor konfigurasi terbaru dari web-map-http.yaml.

    gcloud beta compute url-maps import web-map-http --source web-map-http.yaml
    
  5. Setelah memperbarui peta URL, Anda harus menunggu beberapa saat sebelum dapat mulai mengirimkan traffic ke alamat IP load balancer.

    Kirim permintaan ke host Anda untuk URL yang memerlukan otorisasi.

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

    Konten error dari video-obtain-authorization.html ditayangkan, dan kode status 200 HTTP ditampilkan.

Contoh 3: Mengonfigurasi kebijakan respons error kustom yang terperinci untuk berbagai domain, jalur, dan kode respons error

Contoh ini menunjukkan cara menyesuaikan respons error tertentu untuk berbagai domain URL, jalur URL, dan kode respons error HTTP.

Konfigurasi respons error kustom, yang dijelaskan dalam contoh ini, mengasumsikan hal berikut:

  • Anda telah mengonfigurasi peta URL untuk Load Balancer Aplikasi eksternal dengan perutean berbasis host dan jalur seperti yang ditunjukkan pada gambar berikut.

    Contoh penyiapan layanan backend
    Contoh penyiapan layanan backend (klik untuk memperbesar)
  • Anda telah mengonfigurasi dua bucket backend bernama BUCKET_1 dan BUCKET_2 untuk menampilkan halaman error kustom.

Seperti ditunjukkan dalam tabel berikut, empat kebijakan respons error kustom dikonfigurasi dalam contoh ini. Kebijakan ini dibuat di tiga tingkat dengan urutan prioritas berikut:

  1. Jalur URL (pathMatchers[].pathRules[].customErrorResponsePolicy)
  2. Domain URL (pathMatchers[].defaultCustomErrorResponsePolicy)
  3. Load balancer (urlMaps.defaultCustomErrorResponsePolicy)
Tingkat kebijakan URL Permintaan Cocokkan kode respons HTTP Layanan error Objek error ditampilkan
Jalur URL example.net/video/hd/* 404 BUCKET-2 not-found-hd-videos-404.html
Jalur URL example.net/video/sd/* 404 BUCKET-2 not-found-sd-videos-404.html
Domain URL example.net/* Semua 4xx BUCKET-1 example-net-4xx.html
Load balancer Any Semua 4xx atau 5xx BUCKET-1 error-page-generic.html

Kebijakan respons error kustom di level load balancer hanya diterapkan jika kebijakan cocok dengan kondisi error dan tidak ada kebijakan yang cocok yang ditentukan untuk kode error di tingkat yang lebih rendah; yaitu, domain URL atau jalur URL. Demikian pula, kebijakan respons error kustom di tingkat domain URL diterapkan hanya jika kebijakan cocok dengan kondisi error dan tidak ada kebijakan yang cocok yang ditentukan untuk kode error di tingkat yang lebih rendah, yaitu jalur URL. Dalam contoh ini, jika permintaan ke URL www.example.net/video/hd menemukan respons 404, file not-found-hd-videos-404.html akan ditampilkan. Namun, jika respons 404 ditemukan untuk permintaan ke URL www.example.net/video/, file example-net-4xx.html akan ditampilkan.

Untuk membuat kebijakan respons error khusus di tiga level peta URL, ikuti langkah-langkah berikut:

  1. Mengupload objek error ke 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. Ekspor peta URL (video-org-url-map) ke file bernama video-org-url-map.yaml.

    gcloud beta compute url-maps export video-org-url-map --destination video-org-url-map.yaml
    

    Sebelum Anda menambahkan kebijakan respons error kustom, peta URL (video-org-url-map) memiliki konfigurasi yang mirip dengan berikut ini.

    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. Edit video-org-url-map.yaml untuk menambahkan kebijakan respons error khusus seperti yang ditandai dalam konfigurasi YAML berikut.

    Karena layanan error tidak ditentukan di tingkat domain URL, layanan error di tingkat domain URL akan ditetapkan secara default ke layanan error yang ditentukan di tingkat yang lebih tinggi; yaitu, di level load balancer.

    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. Perbarui peta URL dengan mengimpor konfigurasi terbaru dari video-org-url-map.yaml.

    gcloud beta compute url-maps import video-org-url-map --source video-org-url-map.yaml
    
  5. Setelah memperbarui peta URL, Anda harus menunggu beberapa saat sebelum dapat mulai mengirimkan traffic ke alamat IP load balancer.

    Mengirim permintaan untuk halaman yang tidak ada.

    curl -I http://example.net/a-page-that-does-not-exist
    

    Konten error dari example-net-4xx.html ditayangkan.

    Demikian pula, uji URL lain dengan domain URL dan jalur URL yang berbeda.