使用 negative caching

本頁面提供如何搭配 Cloud CDN 使用 negative caching 的操作說明。Negative caching 可為每個狀態碼設定不同的存留時間。

這麼做的目的是針對一般錯誤或重新導向,套用精細的快取控制。這麼做可以減少來源的負載量,並縮短回應延遲時間來提升使用者體驗。

事前準備

  • 瞭解快取模式和靜態內容

  • 確認已啟用 Cloud CDN;如需操作說明,請參閱「使用 Cloud CDN」。

  • 請視需要更新至最新版本的 Google Cloud CLI:

    gcloud components update
    

狀態碼和預設存留時間

Negative caching 適用於特定狀態碼,詳情請參閱下表。

Cloud CDN 會對這些狀態碼套用下列預設存留時間:

狀態碼 意義 存留時間
HTTP 300 多個選擇 10 分鐘
HTTP 301 和 308 永久重新導向 10 分鐘
HTTP 302 和 307 暫時重新導向 根據預設不會快取
HTTP 404 找不到 120 秒
HTTP 405 找不到方法 60 秒
HTTP 410 消失 120 秒
HTTP 451 基於法律原因而無法使用 120 秒
HTTP 501 未實作 60 秒

您可以透過 negative caching,為指定的 HTTP 狀態碼設定快取存留時間,藉此覆寫這些預設值。

設定 negative caching

Negative caching 可讓您設定服務,以快取失敗和成功結果。這樣一來,Cloud CDN 就能防範產生錯誤 (例如找不到 404) 的要求,就像防範產生成功回應的要求一樣。

控制台

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

    前往「Load balancing」(負載平衡) 頁面

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

gcloud

如為後端 bucket,請使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令,並加上 --negative-caching 旗標。

如為後端服務,請使用 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

如要只針對兩個特定錯誤回應啟用 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

如為後端 bucket,請使用 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
    }
  ]
}

必須啟用 negative caching,才能設定 negativeCachingPolicy 設定。如果您省略這項政策並啟用 negativeCaching,Cloud CDN 會使用「狀態碼和預設存留時間」中列出的預設值。

指定 negative caching 政策時,請務必為「所有」要快取的回應代碼指定快取存留時間。如果存在政策,Cloud CDN 就不會套用任何預設 negative caching。

您可以為 STATUS_CODE 指定下列 HTTP 狀態碼:

  • 300301302307308
  • 404405410421451
  • 501

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

最大允許值為 1800 秒 (30 分鐘),但如果物件不常存取,可能會在定義的存留時間前從快取中剔除。

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

快取模式設為 FORCE_CACHE_ALL 時,negative caching 會覆寫來源設定的所有快取標頭,Cloud CDN 會將回應快取一段時間 (由存留時間指定),如果未設定存留時間,則不會快取回應。

此外,如果快取模式設為 FORCE_CACHE_ALL,Cloud CDN 也會修改 Cache-Control 標頭中傳送給用戶端的 max-age。具體來說,如果特定錯誤已設定存留時間,Cloud CDN 會採用該存留時間設定和 client_ttl 設定中較小的值,並傳送含有該值的 Cache-Control: public,max-age=N 標頭。如果特定錯誤沒有設定存留時間,Cloud CDN 會移除來源傳送的任何 Cache-Control 標頭。Cloud CDN 也一律會移除來源傳送的任何 Expires 標頭。

如果來源一開始啟用 negative caching,但隨後停用 (手動停用或針對特定回應代碼停用快取),系統只會根據 Cache-ControlExpires 標頭,判斷快取錯誤回應是否有效。因此,停用 negative caching 後,系統不會從快取提供標頭中沒有快取時間指令的回應。

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

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

停用 negative caching

控制台

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

    前往「Load balancing」(負載平衡) 頁面

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

gcloud

如為後端 bucket,請使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令,並加上 --no-negative-caching 旗標。

如為後端服務,請使用 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

如為後端 bucket,請使用 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
}