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:
- 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 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:
Upload halaman error HTML (
not-found.html
) ke bucket Cloud Storage.gsutil cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
Ekspor peta URL (
web-map-http
) ke dalam file bernamaweb-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
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.
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
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 HTTP404
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:
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/
Ekspor peta URL (
web-map-http
) ke dalam file bernamaweb-map-http.yaml
.gcloud beta 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. 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
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
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 status200
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.
Anda telah mengonfigurasi dua bucket backend bernama
BUCKET_1
danBUCKET_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:
- Jalur URL (
pathMatchers[].pathRules[].customErrorResponsePolicy
) - Domain URL (
pathMatchers[].defaultCustomErrorResponsePolicy
) - 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:
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/
Ekspor peta URL (
video-org-url-map
) ke file bernamavideo-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
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
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
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.