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:
- Menyiapkan Load Balancer Aplikasi eksternal global dengan backend grup instance VM
- Membuat bucket backend
- Cara kerja peta URL
- Mengonfigurasi peta URL
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:
Upload halaman error HTML (
not-found.html
) ke bucket Cloud Storage.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Ekspor peta URL (
web-map-http
) ke dalam file bernamaweb-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
Edit
web-map-http.yaml
untuk menambahkan kebijakan respons error kustom seperti yang ditandai dalam konfigurasi YAML berikut, di bagiandefaultCustomErrorResponsePolicy
. 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.
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
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 HTTP404
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:
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/
Ekspor peta URL (
web-map-http
) ke dalam file bernamaweb-map-http.yaml
.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
Edit
web-map-http.yaml
untuk menambahkan kebijakan respons error kustom seperti yang ditandai dalam konfigurasi YAML berikut, di bagiandefaultCustomErrorResponsePolicy
. 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
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
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 status200
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.
Anda telah mengonfigurasi dua bucket backend bernama
BUCKET_1
danBUCKET_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:
- Jalur URL (
pathMatchers[].pathRules[].customErrorResponsePolicy
) - Domain URL (
pathMatchers[].defaultCustomErrorResponsePolicy
) - 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:
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/
Mengekspor peta URL (
video-org-url-map
) ke file bernamavideo-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
Edit
video-org-url-map.yaml
untuk menambahkan kebijakan respons error kustom seperti yang ditandai dalam konfigurasi YAML berikut, di bagiandefaultCustomErrorResponsePolicy
.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
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
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.