全域外部應用程式負載平衡器可讓您在產生 HTTP 錯誤狀態碼 (4xx
和 5xx
) 時,自訂錯誤回應。您可以自訂負載平衡器和後端執行個體產生的錯誤回應。您也可以自訂錯誤回應,以回應 Google Cloud Armor 拒絕流量時產生的錯誤回應代碼。
以下是自訂錯誤頁面的範例,您可以為面向外部的消費者應用程式設定錯誤回應,並加入貴公司的品牌和標誌、相關頁面的連結,以及自訂訊息。

使用自訂錯誤回應政策,您可以為不同的 HTTP 錯誤狀態碼、網址網域、網址路徑,以及 HTTP 要求標頭和參數欄位,設定不同的錯誤回應。
傳回自訂錯誤回應可提供下列優點,協助您提升使用者體驗:
- 提供一致的品牌體驗
- 提供符合情境的相關資訊,提升可用性和使用者體驗
- 減少停機和用戶端錯誤造成的負面影響
- 提升網路安全性
如果您未設定自訂錯誤回應政策,系統會提供一般非品牌錯誤物件,如圖 2 所示。

用途
自訂錯誤回應功能可因應許多用途。本節提供幾個高階範例。
定義自己的維護頁面
當後端不正常或處於維護模式時,您可以傳回含有公司品牌和資訊的錯誤頁面。您可以建立內容比對錯誤頁面,提供實用資訊,例如聯絡中心電話號碼,或使用者應何時重試存取網站。您可以根據主機名稱和 HTTP 錯誤碼等錯誤條件的相符情形,自訂錯誤頁面。
定義自己的預設錯誤網頁
您可以根據特定錯誤代碼設定自訂錯誤回應。舉例來說,您可以為 401 (Unauthorized)
HTTP 回應碼設定錯誤頁面,並顯示「登入或註冊」訊息。您也可以為所有其他 4xx
系列和 5xx
系列 HTTP 錯誤代碼,設定含有公司品牌和其他相關資訊的預設錯誤網頁。
定義安全性規則的錯誤回應
如果流量遭到 Cloud Armor 安全性政策拒絕,系統會產生錯誤回應代碼,您可以針對這類代碼傳回自訂錯誤頁面。請務必使用與 Cloud Armor 安全性規則中輸入的 4xx
系列或 5xx
系列 HTTP 錯誤碼相同的錯誤碼,設定錯誤頁面。
降低停機造成的影響
在適用的情況下,您可以設定錯誤回應傳回 200 (OK)
HTTP 狀態碼,並提供靜態網頁,讓使用者在停機期間看到更多相關實用資訊,而不是錯誤頁面。
根據用戶端要求類型自訂錯誤回應
您可以根據 HTTP 要求標頭和參數 (例如 Content-Type
標頭) 自訂錯誤回應。將原始要求轉送至錯誤服務時,轉送作業可以將 Content-Type
標頭納入考量,以便提供網頁 (適用於來自瀏覽器的要求) 或 JSON (適用於來自 Web API 的要求)。
自訂錯誤回應政策的運作方式
您可以在網址對應資源的三個層級定義自訂錯誤回應政策:負載平衡器層級、網址網域層級和網址路徑層級。
負載平衡器層級。這項政策會套用至負載平衡器接收的所有流量。
網址網域層級。這項政策適用於導向特定網域名稱或主機名稱的流量,例如
www.example.com
。網址路徑層級。這項政策會套用至導向特定路徑的流量,例如
www.example.com/images/*
。在這個層級,您也可以搭配使用進階比對條件與 HTTP 要求標頭和參數,例如Content-Type:application/json
。
下表顯示在網址對應的負載平衡器層級、網址網域層級和網址路徑層級套用的自訂錯誤回應政策。
政策層級 | API 欄位 |
---|---|
負載平衡器 | urlMaps.defaultCustomErrorResponsePolicy |
網址網域 | pathMatchers[].defaultCustomErrorResponsePolicy |
網址路徑 |
|
如果您在網址對應資源的多個層級設定自訂錯誤回應政策,系統會傳回網址對應最低層級自訂錯誤政策指定的錯誤物件。在網址對應較低層級定義的錯誤回應政策更具體,優先順序高於在網址對應較高層級定義的錯誤回應政策。
舉例來說,只有在政策符合錯誤條件,且較低層級 (網址網域或網址路徑) 未定義錯誤代碼的相符政策時,系統才會套用負載平衡器層級的自訂錯誤回應政策。同樣地,只有在政策符合錯誤條件,且較低層級 (網址路徑) 的錯誤代碼未定義相符政策時,系統才會套用網址網域層級的自訂錯誤回應政策。如要進一步瞭解這項設定,請參閱「針對不同網域、路徑和錯誤回應代碼,設定精細的自訂錯誤回應政策」。
指定多個錯誤回應規則,以比對 HTTP 錯誤回應代碼
在自訂錯誤回應政策的任何層級,您都可以指定多項錯誤回應規則。這些規則可根據特定錯誤代碼或錯誤代碼範圍,比對 HTTP 錯誤回應。如果您為錯誤代碼範圍指定規則,也為特定錯誤代碼指定規則,則特定錯誤代碼的規則優先。
舉例來說,假設您為 401 (Unauthorized)
錯誤代碼設定一項規則,並為所有 4xx
系列錯誤代碼設定另一項規則。如果後端服務傳回 401
錯誤代碼,系統就會套用與 401
錯誤相符的規則。不過,如果後端服務傳回 403
錯誤碼,4xx
錯誤的規則就會生效。
覆寫 HTTP 回應代碼
錯誤回應規則可讓您修改負載平衡器傳回的 HTTP 回應碼。這基本上是指您可以覆寫伺服器產生的回應代碼,並定義要求最終應有的回應代碼。您可以指定傳回任何 HTTP 回應代碼,包括 200 (OK)
、4xx
系列或 5xx
系列的回應代碼,或是任何其他三位數的回應代碼。如要進一步瞭解如何覆寫回應碼,請參閱「為特定主機的特定錯誤代碼設定錯誤網頁」。
如果您定義覆寫回應碼,系統會將其擷取為負載平衡記錄中的新欄位 overrideResponseCodeServed
。只有在自訂錯誤回應政策套用覆寫回應代碼時,才會填寫這個欄位。
status
程式碼登入 httpRequest
欄位不會受到影響。這項指標會擷取伺服器產生的 HTTP 回應碼,或負載平衡器傳回的 HTTP 回應。如果回應代碼是由自訂錯誤回應政策修改,這個狀態碼可能會與實際提供給用戶端的代碼不同。
快取自訂錯誤回應
如要快取自訂錯誤回應,請為產生錯誤的後端指定負向快取政策。這麼做的目的是針對一般錯誤或重新導向,套用精細的快取控制。這麼做可以減少來源的負載量,並縮短回應延遲時間來改善使用者體驗。
為產生錯誤的後端定義的負向快取政策,一律優先於為錯誤服務中的錯誤物件定義的 Cache-Control
中繼資料。此外,如果負載平衡器傳回覆寫回應代碼,系統會根據覆寫回應代碼的值套用負快取政策,而不是根據後端傳回給負載平衡器的原始回應代碼。如果傳回非錯誤代碼 (HTTP 200
) 做為覆寫回應代碼,則不適用負向快取政策。
如果失敗回應的存留時間 (TTL) 尚未到期,負載平衡器會繼續提供快取內容,不會將要求路由至後端服務或後端值區。不過,這項行為取決於負載平衡器是否已啟用 Cloud CDN。
已為負載平衡器啟用 Cloud CDN
本節說明啟用 Cloud CDN 並使用自訂錯誤回應時,負載平衡器的行為。
負載平衡器收到要求時,會檢查 Cloud CDN 快取。如果負載平衡器找到使用者要求的回應快取,就會將其傳回給使用者。這個快取回應可以是使用者要求的內容,也可以是自訂錯誤物件。
如果快取未命中,負載平衡器會處理要求並傳送至後端。
如果後端提供非錯誤回應,該回應會傳回給使用者。不過,如果用戶端要求發生錯誤 (
4xx
或5xx
HTTP 回應代碼),負載平衡器會嘗試從您以下列方式指定的錯誤服務取得自訂錯誤物件:負載平衡器會檢查所有自訂錯誤回應政策,並取得與錯誤狀態碼和其他相符條件對應的自訂錯誤物件適當路徑。
負載平衡器會將自訂錯誤物件的要求轉送至您在自訂錯誤回應政策中指定的錯誤服務。「錯誤服務」一詞是指提供自訂錯誤內容的後端 bucket 或後端服務。
負載平衡器會將自訂錯誤物件傳回給提出要求的用戶端。此外,系統也會將物件傳送至 Cloud CDN,以便將錯誤物件快取
cdnPolicy.negativeCachingPolicy[].ttl
指定的時間長度。
負載平衡器已停用 Cloud CDN
如果停用 Cloud CDN,建議使用後端 bucket 做為錯誤服務,而非後端服務。這是因為如果停用 Cloud CDN,後端服務就無法快取內容;不過,後端值區具有內建快取功能,即使停用 Cloud CDN,也能快取錯誤回應。
限制
自訂錯誤回應僅適用於全域外部應用程式負載平衡器。不支援區域和傳統模式。
如果無法從錯誤服務擷取自訂錯誤物件 (例如內容路徑設定錯誤),系統會提供一般非品牌錯誤物件。
自訂錯誤回應政策不會監控或篩選錯誤服務傳回的物件,以防出現安全風險。因此,您應盡力消除安全漏洞,並限制潛在曝光造成的影響。
自訂錯誤回應僅適用於可公開讀取的 Cloud Storage bucket。
為避免使用 Cloud Storage bucket 時發生任何設定錯誤,請參閱常見的 Cloud Storage 最佳做法。
如果全域外部應用程式負載平衡器只有後端 bucket,自訂錯誤回應就無法運作。除了後端值區外,您也必須至少有一個後端服務附加至負載平衡器。
根據自訂錯誤回應來源定義的任何自訂回應標頭,都不會套用至外送回應。
自訂錯誤回應政策只會套用至實際來自後端的 HTTP 回應。如果回應來自 Google Front End (GFE),您可能會看到其他非預期的 HTTP 回應代碼。
自訂錯誤回應與下列類型的要求不相容:
- 要求主體會觸發容錯植入政策。
- 後端服務在完全讀取主體前傳送回應的大型要求。
- 包含
Authorization
標頭的要求。如果要求包含Authorization
標頭,Cloud Storage 會傳回Authentication Required
回應。
定價
使用自訂錯誤回應不會產生額外費用。負載平衡適用標準價格。 Google Cloud 詳情請參閱「定價」一文。