當源站發生超時、宕機、返回 502/504 等錯誤時,ATS (Apache Traffic Server) 預設會將錯誤直接回傳給用戶,造成體驗中斷。期望行為:若 ATS 本地存在**已過期**的快取內容,暫時回傳舊內容(HTTP 200),待源站恢復後再更新快取。
攔截源站回應,判斷狀態碼為 502/504 且本地存在過期快取時,直接服務過期內容並修改回應碼為 200。優點:邏輯可控、可自定義降級策略;缺點:開發維護成本高、需 C/C++ 語言編寫、升級 ATS 版本可能需適配。
proxy.config.http.cache.max_stale_age 參數(零代碼、推薦)# records.config CONFIG proxy.config.http.cache.max_stale_age INT 604800
含義:當無法從源站獲取新鮮內容時,允許繼續服務過期快取的最大秒數(預設 604800 秒 = 7 天)。
TCP_HIT/200,Proxy-Connection: keep-alive。TCP_REFRESH_FAIL_HIT/200,標頭含 Warning: 111 DLC-3.0、Proxy-Connection: close,表示正在服務過期快取且關閉連線。TCP_HIT/200,含 Warning: 111 DLC-3.0、Proxy-Connection: keep-alive,持續服務過期內容。TCP_REFRESH_FAIL_HIT/502,不再服務過期快取,回傳真實錯誤。ATS 必須**已快取該資源且快取已過期**。若從未快取或快取尚未過期,則不觸發此機制。
| 場景 | 關鍵標頭特徵 |
|---|---|
| 正常服務 | Proxy-Connection: keep-alive |
| 源站停機首請 | Proxy-Connection: closeWarning: 111 DLC-3.0 |
| 源站停機後續請 | Proxy-Connection: keep-aliveWarning: 111 DLC-3.0 |
| 超過容忍時間 | HTTP/1.1 502 Connection refused |
max_stale_age(如新聞類可縮短至 1 小時,靜態資源可延長至 1 週)。TCP_REFRESH_FAIL_HIT 比例,作為源站健康度告警指標。proxy.config.http.cache.required_headers 確保關鍵資源可被快取。