使用負面快取

本頁面提供使用 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 找不到) 的要求中保護來源,就像從產生成功回應的要求中保護來源一樣。

控制台

  1. 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。

    前往「負載平衡」頁面

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「編輯」圖示
  4. 在「後端設定」中選取後端,然後按一下「編輯」圖示
  5. 確認已選取「Enable Cloud CDN」
  6. 按一下視窗底部的「進階設定」
  7. 按一下「啟用負面快取」
  8. 按一下「新增負面快取政策」
    1. 輸入 HTTP 狀態碼
    2. 選取「快取存留時間 (TTL)」
  9. 按一下 [Update]
  10. 再次按一下「更新」

gcloud

如要使用後端儲存格,請搭配 --negative-caching 標記使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令。

針對後端服務,請使用 gcloud compute backend-services creategcloud 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.insertMethod: backendBuckets.update API 呼叫。

如為後端服務,請使用 Method: backendServices.insertMethod: 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 狀態碼:

  • 300301302307308
  • 404405410421451
  • 501

您可以為每個狀態碼指定快取回應的秒數。如要停用狀態碼的負面快取功能,請從負面快取政策中排除該狀態碼。

允許的最大值為 1800 秒 (30 分鐘);不過,如果物件不常被存取,可能會在定義的 TTL 到期前從快取中移除。

當快取模式設為 CACHE_ALL_STATICUSE_ORIGIN_HEADERS 時,負向快取會套用至具有指定回應代碼且缺少任何 Cache-ControlExpires 標頭的回應。

當快取模式設為 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-ControlExpires 標頭,將快取的錯誤回應視為有效。因此,一旦停用負面快取功能,回應標頭中沒有快取年齡指令的回應就不會從快取中提供。

Cloud CDN 會在回應 GET 要求時快取內容。詳情請參閱「可快取的內容」。

每個快取項目都是透過一組快取金鑰來識別。

停用負面快取

控制台

  1. 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。

    前往「負載平衡」頁面

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「編輯」圖示
  4. 在「後端設定」中選取後端,然後按一下「編輯」圖示
  5. 確認已選取「Enable Cloud CDN」
  6. 按一下視窗底部的「進階設定」
  7. 取消勾選「啟用負面快取」旁的核取方塊。
  8. 按一下 [Update]
  9. 再次按一下「更新」

gcloud

如要使用後端儲存格,請搭配 --no-negative-caching 標記使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令。

針對後端服務,請使用 gcloud compute backend-services creategcloud 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.insertMethod: backendBuckets.update API 呼叫。

如為後端服務,請使用 Method: backendServices.insertMethod: 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
}