GCP國際帳號辦理 GCP CDN配置自訂錯誤頁面
第一章:為什麼要在 CDN 顯示自訂錯誤頁
很多團隊把「自訂錯誤頁」當成前端視覺問題:404 不要顯示網站 logo 失效、500 不要出現系統報錯字串。但在用上 CDN 之後,自訂錯誤頁其實變成一個更關鍵的工程議題——因為請求的路徑、回應的來源、以及回應是否被快取,都可能影響你最後看見的錯誤內容。
當使用者打到你的站點,如果某個時刻後端不可用、或是回源回傳了 502/503/504,你希望他看到的是品牌一致、資訊清楚、可引導操作的頁面,例如「目前維護中,稍後再試」或「網路擁塞,請稍候」。更重要的是,你希望這個錯誤頁不要依賴後端服務的穩定性,否則後端壞掉時,你的錯誤頁也跟著壞掉。
在 GCP 的架構中,CDN 通常位於用戶端與你的負載平衡器(或 HTTP(S) 負載平衡)之間。真正要做的是:讓「錯誤也能被負載平衡器(或搭配的資源)處理」,並且在回源失敗時給出你定義的回應內容。以下我會用一個清晰的流程,帶你把自訂錯誤頁配置起來,並避免踩到常見的坑。
第二章:先釐清 GCP CDN 的錯誤會從哪裡來
你在瀏覽器看到的錯誤,可能有兩種來源:
- 你的後端回傳了狀態碼:例如應用程式回傳 404、或某些故障回傳 503。
- CDN/負載平衡器與回源之間發生問題:例如回源超時、連線失敗、DNS/路由問題,這時候負載平衡器可能把它轉成 502/504。
GCP國際帳號辦理 你要配置自訂錯誤頁,就必須知道你想攔截的狀態碼是哪一層產生的。
在實務上,最常見的做法是:使用 URL 映射(URL Map)與後端服務(Backend Service)或負載平衡器的錯誤處理機制,針對特定狀態碼配置自訂回應內容。至於 CDN 的部分,重點在於快取行為要一致,避免你以為在顯示錯誤頁,實際上 CDN 把別的內容快取回來了,或把「錯誤」錯誤地也快取成了看不懂的狀態。
第三章:整體目標與推薦架構
我們用一個常見目標來描述整體配置:
- 所有正常請求走原本的後端服務(例如 Cloud Run、GKE Ingress、或自建服務)。
- 當發生 404/502/503/504 等錯誤時,使用統一的自訂錯誤頁。
- 錯誤頁內容最好由「穩定的資源」提供,不依賴失敗的後端。
- 在啟用 Cloud CDN 後,仍能穩定呈現自訂錯誤頁,而不是顯示雜訊或瀏覽器錯誤。
推薦的做法通常是:把自訂錯誤頁準備成一個可穩定回應的靜態資源(例如放在 Cloud Storage,或由一個輕量後端處理)。然後透過負載平衡器的錯誤處理機制,將特定狀態碼導向該資源。
第四章:準備自訂錯誤頁內容
在真正進到 GCP 控制台之前,先把錯誤頁準備好。你可以做一個簡單的 HTML(或 JSON,如果你是 API)。範例:
- 404:告知路徑不存在,提供返回首頁的連結與站點搜尋建議。
- 503:維護中或容量不足,提供「稍後再試」與服務狀態頁(如果你有)。
- GCP國際帳號辦理 502/504:後端不可用或逾時,提供聯絡方式或自動重試提示。
GCP國際帳號辦理 這裡要注意兩點。第一,錯誤頁要能在低頻率或壓力情境下仍回得快;第二,如果你的應用同時提供前端資源與 API,就要區分錯誤呈現方式,避免把 HTML 錯誤頁回給 API 客戶端造成解析失敗。
GCP國際帳號辦理 如果你使用的是 Cloud Storage 當錯誤頁來源,建議:
- 同一套錯誤頁用固定檔名(例如
error-404.html、error-503.html)。 - 開啟合適的快取標頭,讓錯誤頁的快取策略可控。
- 確保權限不會因為主服務故障而失效。
第五章:建立支持 CDN 的負載平衡器基礎
自訂錯誤頁大多要掛在 HTTP(S) 負載平衡(含 URL Map)上。你先確定你已經有一個可工作的架構,例如:
- 前端:HTTPS 端點(Managed certificate 或自備憑證)。
- 後端:指向你的服務(例如 Cloud Run backend 或站點後端)。
- 啟用 Cloud CDN:在適當的 backend 或 URL map 行為中開啟 Cloud CDN。
假如你還沒配置好 CDN,通常可以先完成主路由可用性,再逐步加入錯誤頁機制。原因是:錯誤頁的測試需要一個穩定的主流程,否則你會分不清是 CDN 問題還是錯誤導向問題。
第六章:設定錯誤碼導向自訂回應
當你啟用 URL Map 與後端服務後,接下來就是「針對狀態碼」指定要回哪個錯誤回應。不同情境下,你可能看到兩種常見配置方式:一種是直接在特定錯誤碼上導向自訂內容;另一種是透過自訂回應(custom response)或後端的錯誤處理設定。
核心概念是:你要把某些錯誤狀態碼對應到你準備好的錯誤頁,而不是讓瀏覽器收到平台預設錯誤訊息。
具體操作時,你會在 URL Map 或 backend 相關設定中看到「default route」、「path matcher」等結構。你可以按下列邏輯配置:
- 定義你的主路由(所有路徑都指向主 backend)。
- 對於特定狀態碼(例如 404、502、503、504),在錯誤處理中指定「回應內容來源」。
- 確保錯誤回應的內容類型符合你的需求(HTML 或 JSON)。
如果你的錯誤頁來源是另一個後端(例如 Cloud Storage 或另一個輕量服務),那你的路由會更清楚:錯誤碼一出現,就把使用者導到錯誤後端。
如果你的負載平衡器支援直接使用「自訂回應」的機制,你可以直接在配置裡嵌入或引用錯誤內容。這樣就能避免額外的回源路徑。不過要注意內容大小與維護成本:錯誤頁通常不應該變成大型靜態資源。
第七章:把 Cloud CDN 和錯誤頁策略放在同一個節奏上
啟用 Cloud CDN 之後,你要面對快取帶來的另一個現實:當某個請求結果是 404 或 503,你是否希望 CDN 快取它?快取的目的在於減少回源負擔,但錯誤快取會帶來副作用——例如後端恢復後,使用者仍可能被 CDN 命中舊的錯誤。
因此我建議你針對錯誤碼採用「短快取或不快取」的策略,至少在初期測試時如此。你可以從兩個層面思考:
- 錯誤頁內容本身:通常應該有合理的快取(例如幾分鐘或更長視需求),因為錯誤頁檔案是穩定的。
- 錯誤狀態的回應:不要讓 CDN 長時間快取 502/503/504,否則當服務恢復,錯誤仍可能持續出現。
如果你的設定允許對特定狀態碼或錯誤回應做快取控制,務必啟用相對保守的值。尤其是 503/504,通常代表瞬時故障,應該讓快取不至於掩蓋修復。
另外,觀察 HTTP 標頭也很重要。你要確認自訂錯誤回應的 Content-Type 正確、Cache-Control 符合預期。否則即使你配置正確,CDN 仍可能按預設行為快取或不快取。
第八章:測試方法——不要只看一次
測試自訂錯誤頁,最怕的狀況是「我在測試時看到了,但上線後不一樣」。原因通常是快取、或錯誤條件觸發方式不同。
我建議你按三階段測:
第一階段:模擬後端正常但路徑不存在(測 404)
你可以用一個確定不存在的路徑訪問,確認回應:
- GCP國際帳號辦理 狀態碼是否符合你想要的(通常仍是 404)。
- 回應內容是否為你配置的自訂 404 頁面。
- 內容的樣式、編碼、以及連結是否正確。
如果你發現回的是平台預設 404,而不是自訂頁,通常表示你的錯誤處理還沒涵蓋該路徑類型,或你的 URL map 順序沒有匹配到設定。
第二階段:模擬 503(服務可達但故障)
503 通常代表後端可連到但不願意回應或達不到條件。你可以在後端做短暫的健康狀態變更(例如故意讓服務回 503),再觀察負載平衡器是否導向你的自訂 503 頁。
同時觀察是否出現錯誤快取:在你修復後,錯誤頁應該停止出現。若仍持續,代表快取策略可能對 503 不合適。
第三階段:模擬 502/504(回源失敗或超時)
這類錯誤更常出現在回源不穩、逾時、或網路問題。測試方法通常是讓後端服務暫時不可用,或延長到超時條件。
你要特別看兩件事:
- 錯誤頁是否如預期出現。
- 狀態碼是否正確,例如 502 對應「回源錯誤」而 504 對應「逾時」。
若你發現兩者都導向同一頁也可以接受,但至少要確保你沒有把狀態碼與內容混亂:例如明明是逾時卻顯示「找不到頁面」。
第九章:常見踩雷與排查思路
實務上,自訂錯誤頁最常見的問題不是「配置不能做」,而是「你以為做了,但沒有真正命中」。以下是我整理的常見原因與排查方向。
1. URL map 的路徑匹配順序不對
如果你有多個 path matcher、或有特定路徑先於其他規則匹配,那麼某些路徑可能繞過你的錯誤處理設定。排查方式是:確認目標錯誤發生時的請求路徑確實命中你設定的規則。
2. 你測到的是應用回傳 404,但配置的是回源錯誤
例如你想測 502/504,但其實你的服務回傳的是某種 500 或 404。錯誤處理只對特定狀態碼生效時,就會出現你看到的不是自訂頁。排查時先用瀏覽器或抓包確認「實際狀態碼」與「回應來源」。
3. CDN 快取把錯誤結果保存太久
這是最惱人的情況:當你修復後仍持續看到錯誤頁。通常原因是快取 TTL 設太長,或沒有對錯誤碼做排除。排查時查看回應是否帶有快取標頭,並測試重新整理與等待時間的差異。
4. Content-Type 不一致導致頁面看起來怪異
有時候你確實導向了錯誤頁,但瀏覽器卻不渲染或樣式錯亂。這常見於回應頭沒設好,例如 HTML 內容卻以純文字或錯誤編碼回來。排查時檢查 Content-Type。
5. 錯誤頁來源後端本身不可用
如果你的錯誤頁是從同一個會故障的服務取得,那當服務壞掉時,你的錯誤頁也會壞掉。這也是為什麼我前面建議使用穩定的靜態資源或輕量後端。
第十章:實戰建議——讓錯誤頁不只是「好看」,而是「有用」
自訂錯誤頁的價值不在於把平台錯誤訊息替換成漂亮字體,而在於你能引導使用者完成下一步。這裡有幾個實戰方向:
- 提供可行的返回路徑:例如返回首頁、返回上一頁(若可行)、或提供搜尋框。
- 對 503/504 說清楚時間預期:簡短說明正在恢復,並給出建議等待多久。
- 避免洩漏內部資訊:不要把錯誤堆疊、網路拓樸或服務名稱暴露在錯誤頁內容中。
- 對爬蟲或 SEO 友善:404 頁應仍回正確的 404 狀態碼,並確保 HTML 結構合理。
此外,如果你有多語系站點,錯誤頁也要考慮語言回應。雖然這會增加配置與內容準備,但能顯著降低使用者挫折。
第十一章:把它做成可維護的流程
當你把自訂錯誤頁加入系統,後續維護會遇到兩個需求:一是內容更新流程,二是錯誤碼策略調整。建議你把錯誤頁的來源與版本管理做起來。
例如:
- 錯誤頁內容與應用版本解耦:不要每次發佈都讓錯誤頁跟著重新部署。
- 以固定檔名或固定路徑承載:降低引用路徑變動帶來的風險。
- 在 CDN 快取策略上保守:錯誤頁一般是小內容,但錯誤快取不要過久。
當你能穩定維護後,下一步才是優化體驗:加入錯誤追蹤(例如埋點錯誤碼出現頻率)、或讓 503 頁顯示更具體的維護資訊。
第十二章:結語——把錯誤當成系統的一部分
配置 GCP CDN 的自訂錯誤頁,真正考驗的是你對「請求路徑」與「回應狀態」的理解。當你能把錯誤處理鎖定在正確的層級,並讓 CDN 的快取策略與錯誤語意一致,自訂錯誤頁就不再是裝飾,而是可靠的服務體驗。
把流程走完,你就會得到三個結果:第一,用戶在故障時看到一致且有用的內容;第二,排查問題更容易,因為你能用狀態碼與內容來對照;第三,系統復原後不會被錯誤快取拖著走。
GCP國際帳號辦理 如果你願意,我也可以依照你目前的部署形態(例如 Cloud Run / GKE / 只用後端桶 / 是否有多域名與路由規則)幫你把配置步驟細化成一套對應你的範本。你只要說你使用的後端類型,以及你希望覆蓋哪些錯誤碼。

