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 tingkat resource peta URL—tingkat load balancer, tingkat domain URL, dan tingkat jalur URL.

Contoh konfigurasi ini didasarkan pada konsep dan dibuat berdasarkan penyiapan yang dijelaskan dalam dokumen berikut:

Contoh 1: Mengonfigurasi halaman error untuk semua error 4xx yang umum untuk 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 bernama web-backend-service. Jika permintaan mengalami respons 4xx, kebijakan respons error kustom akan 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.

    gcloud storage 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 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, di bagian defaultCustomErrorResponsePolicy. Dalam contoh ini, kebijakan respons error dikonfigurasi di tingkat 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 referensikan oleh bucket backend yang dilampirkan ke load balancer Anda. Bucket Cloud Storage menyediakan cara sederhana bagi Anda untuk menyimpan objek error dan menampilkannya ke klien menggunakan load balancer. Namun, Anda juga dapat menayangkan halaman error dan aset terkait tanpa menggunakan bucket backend. Misalnya, Anda dapat menggunakan layanan backend, yang mereferensikan backend grup instance VM yang memiliki server Apache yang dikonfigurasi untuk menayangkan halaman respons error kustom.

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

    gcloud 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 mengirim 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 untuk host tertentu

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

Dalam sebagian besar kasus, konten error Anda kemungkinan berisi link ke aset—misalnya, gambar logo. Klien membuat permintaan untuk aset yang dirujuk di halaman error, dan permintaan tambahan dikirim ke load balancer untuk mengambilnya. Load balancer kemudian merespons permintaan dan menampilkan aset tertaut. Hal ini dilakukan dengan menyimpan aset ini 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 aset tertaut bukan respons error, tetapi 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. Dalam contoh ini, kode respons telah berubah 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 akan dipertahankan.

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

Tingkat kebijakan Kolom API Mencocokkan 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

Untuk 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.

    gcloud storage cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/
    gcloud storage 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 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, di bagian defaultCustomErrorResponsePolicy. Dalam contoh ini, kebijakan respons error kustom dikonfigurasi di tingkat 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 secara default ditetapkan ke layanan error yang ditentukan di tingkat yang lebih tinggi, yaitu tingkat 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. Update peta URL dengan mengimpor konfigurasi terbaru dari web-map-http.yaml.

    gcloud 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 mengirim 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 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 pemilihan rute berbasis host dan jalur seperti yang digambarkan 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 yang ditunjukkan dalam tabel berikut, empat kebijakan respons error kustom dikonfigurasi dalam contoh ini. Kebijakan ini dibuat di tiga tingkat dalam urutan prioritas berikut:

  1. Jalur URL (pathMatchers[].pathRules[].customErrorResponsePolicy)
  2. Domain URL (pathMatchers[].defaultCustomErrorResponsePolicy)
  3. Load balancer (urlMaps.defaultCustomErrorResponsePolicy)
Tingkat kebijakan Minta URL Mencocokkan 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 tingkat load balancer hanya diterapkan jika kebijakan cocok dengan kondisi error dan tidak ada kebijakan yang cocok yang telah 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 hanya diterapkan jika kebijakan cocok dengan kondisi error dan tidak ada kebijakan yang cocok yang telah 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 kustom di tiga tingkat peta URL, ikuti langkah-langkah berikut:

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

    gcloud 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 kustom seperti yang ditandai dalam konfigurasi YAML berikut, di bagian defaultCustomErrorResponsePolicy.

    Karena layanan error tidak ditentukan di tingkat domain URL, layanan error di tingkat domain URL secara default ditetapkan ke layanan error yang ditentukan di tingkat yang lebih tinggi, yaitu tingkat 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. Update peta URL dengan mengimpor konfigurasi terbaru dari video-org-url-map.yaml.

    gcloud 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 mengirim 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.