本頁面提供使用 Cloud CDN 搭配負面快取的操作說明。負面快取可讓您為每個狀態碼設定不同的 TTL。
這是為了針對一般錯誤或重新導向,套用精細的快取控制機制。這麼做可以減少來源的負載量,並縮短回應延遲時間來改善使用者體驗。
事前準備
請參閱快取模式和靜態內容。
請確認已啟用 Cloud CDN。如需操作說明,請參閱「使用 Cloud CDN」。
視需要更新至最新版 Google Cloud CLI:
gcloud components update
狀態碼和預設 TTL
負面快取適用於特定狀態碼,如下表所列。
Cloud CDN 會將下列預設 TTL 套用至這些狀態碼:
狀態碼 | 意義 | 存留時間 |
---|---|---|
HTTP 300 | 多個選項 | 10 分鐘 |
HTTP 301 和 308 | 永久重新導向 | 10 分鐘 |
HTTP 302 和 307 | 暫時重新導向 | 預設不會快取 |
HTTP 404 | 找不到 | 120 秒 |
HTTP 405 | 找不到方法 | 60 秒 |
HTTP 410 | Gone (消失) | 120 秒 |
HTTP 451 | 因法律原因而無法使用 | 120 秒 |
HTTP 501 | 未實作 | 60 秒 |
您可以使用負向快取,為指定的 HTTP 狀態碼設定快取 TTL,藉此覆寫這些預設值。
設定負面快取
負面快取可讓您設定服務,以便快取失敗和成功的結果。這可讓 Cloud CDN 從產生錯誤 (例如 404 找不到) 的要求中保護來源,就像從產生成功回應的要求中保護來源一樣。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 在「後端設定」中選取後端,然後按一下「編輯」圖示 。
- 確認已選取「Enable Cloud CDN」。
- 按一下視窗底部的「進階設定」。
- 按一下「啟用負面快取」。
- 按一下「新增負面快取政策」。
- 輸入 HTTP 狀態碼。
- 選取「快取存留時間 (TTL)」。
- 按一下 [Update]。
- 再次按一下「更新」。
gcloud
如要使用後端儲存格,請搭配 --negative-caching
標記使用 gcloud compute backend-buckets create 或 gcloud compute backend-buckets update 指令。
針對後端服務,請使用 gcloud compute backend-services create 或 gcloud compute backend-services update 指令,並加上 --negative-caching
標記。
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --negative-caching
如要只為兩種特定錯誤回應啟用負向快取,請將狀態碼為 404
的回應設定為快取 60 秒,並將狀態碼為 405
的回應設定為快取 120 秒。
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --negative-caching \ --cache-mode=CACHE_ALL_STATIC \ --default-ttl=86400 \ --negative-caching-policy='404=60,405=120'
api
如要使用後端值區,請使用 Method: backendBuckets.insert 或 Method: backendBuckets.update API 呼叫。
如為後端服務,請使用 Method: backendServices.insert 或 Method: backendServices.update API 呼叫。
請使用下列其中一個 API 呼叫:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
將以下程式碼片段新增至 JSON 要求主體:
"cdnPolicy": { "negativeCaching": ON, "negativeCachingPolicy": [ { "code": STATUS_CODE, "ttl": TTL_SECONDS } ] }
您必須啟用負面快取,才能設定 negativeCachingPolicy
設定。如果您省略政策並啟用 negativeCaching
,Cloud CDN 會使用「狀態碼和預設 TTL」中列出的預設值。
指定負面快取政策時,請務必為所有要快取的回應代碼指定快取存留時間。在存在政策的情況下,Cloud CDN 不會套用任何預設的負面快取。
針對 STATUS_CODE,您可以指定下列 HTTP 狀態碼:
300
、301
、302
、307
、308
404
、405
、410
、421
、451
501
您可以為每個狀態碼指定快取回應的秒數。如要停用狀態碼的負面快取功能,請從負面快取政策中排除該狀態碼。
允許的最大值為 1800 秒 (30 分鐘);不過,如果物件不常被存取,可能會在定義的 TTL 到期前從快取中移除。
當快取模式設為 CACHE_ALL_STATIC
或 USE_ORIGIN_HEADERS
時,負向快取會套用至具有指定回應代碼且缺少任何 Cache-Control
或 Expires
標頭的回應。
當快取模式設為 FORCE_CACHE_ALL
時,負面快取會覆寫來源設定的任何快取標頭,Cloud CDN 會根據 TTL 指定的時間長度快取回應,如果未設定 TTL,則不會快取回應。
此外,當快取模式設為 FORCE_CACHE_ALL
時,Cloud CDN 也會修改 Cache-Control
標頭中傳送至用戶端的 max-age
。特別是,如果特定錯誤有設定 TTL 設定,Cloud CDN 會採用 TTL 設定和 client_ttl
設定值中的較小值,並傳送包含該值的 Cache-Control: public,max-age=N
標頭。如果特定錯誤沒有設定 TTL,Cloud CDN 會移除來源傳送的任何 Cache-Control
標頭。Cloud CDN 也會一律移除來源傳送的任何 Expires
標頭。
如果原始來源一開始啟用負面快取功能,但後來關閉 (手動關閉或為特定回應代碼關閉快取功能),系統會根據 Cache-Control
或 Expires
標頭,將快取的錯誤回應視為有效。因此,一旦停用負面快取功能,回應標頭中沒有快取年齡指令的回應就不會從快取中提供。
Cloud CDN 會在回應 GET
要求時快取內容。詳情請參閱「可快取的內容」。
每個快取項目都是透過一組快取金鑰來識別。
停用負面快取
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 在「後端設定」中選取後端,然後按一下「編輯」圖示 。
- 確認已選取「Enable Cloud CDN」。
- 按一下視窗底部的「進階設定」。
- 取消勾選「啟用負面快取」旁的核取方塊。
- 按一下 [Update]。
- 再次按一下「更新」。
gcloud
如要使用後端儲存格,請搭配 --no-negative-caching
標記使用 gcloud compute backend-buckets create 或 gcloud compute backend-buckets update 指令。
針對後端服務,請使用 gcloud compute backend-services create 或 gcloud compute backend-services update 指令,並加上 --no-negative-caching
標記。
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME) --no-negative-caching
api
如要使用後端值區,請使用 Method: backendBuckets.insert 或 Method: backendBuckets.update API 呼叫。
如為後端服務,請使用 Method: backendServices.insert 或 Method: backendServices.update API 呼叫。
請使用下列其中一個 API 呼叫:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
將下列程式碼片段新增至 JSON 要求主體:
"cdnPolicy": { "negativeCaching": OFF }