變更存留時間設定和覆寫值

本頁說明如何使用 Cloud CDN 變更 TTL 覆寫值。您可以透過 TTL 覆寫值,精細控管 Cloud CDN 快取內容的時間長度,以便重新驗證內容。

下表匯總了 TTL 設定。

  預設存留時間 存留時間上限 用戶端存留時間
設定原因 改善不常變更的內容快取命中率 強制 Cloud CDN 比來源標頭指定的頻率更頻繁地重新驗證內容 強制用戶端更頻繁地對 Cloud CDN 重新驗證內容
用於以下情況: 成功回應的情況下,下列任一項為真:
  • 快取模式 = FORCE_CACHE_ALL
  • cache mode = CACHE_ALL_STATIC,內容類型可靜態快取,且來源標頭 (max-ages-maxageExpires) 未設定 TTL
符合下列所有條件:
  • 快取模式 = CACHE_ALL_STATIC
  • 存留時間是由來源標頭 (max-ages-maxageExpires) 設定
  • 來源標頭中指定的 TTL 大於存留時間上限值
下列其中一個為真:
  • cache mode = FORCE_CACHE_ALL,且用戶端存留時間值小於 Cloud CDN 的存留時間
  • cache mode = CACHE_ALL_STATIC,且用戶端存留時間小於來源標頭設定的存留時間 (如果沒有來源標頭資訊,則為預設存留時間)
預設值 3600 秒 (1 小時) 86,400 秒 (1 天) 3600 秒 (1 小時)
允許的最大值 31,622,400 秒 (1 年) 31,622,400 秒 (1 年) 31,622,400 秒 (1 年)
附註 必須小於或等於存留時間上限

--default-ttl=0
強制在原點重新驗證回應
必須小於或等於存留時間上限

事前準備

  • 請參閱快取模式

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

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

    gcloud components update
    

設定預設存留時間

如要改善不常變更的內容快取命中率,您可以覆寫預設的 TTL,讓 Cloud CDN 更少重新驗證來源的內容。請注意,不常存取的物件可能會在定義的 TTL 到期前從快取中移除。

當快取模式為 FORCE_CACHE_ALL 時,預設的存留時間會覆寫所有回應中設定的存留時間 (包括來源標頭中設定的存留時間)。在這個模式中,Cloud CDN 會為用戶端提供的回應設定 publicmax-age 屬性,因此用戶端可查看預設的 TTL。

CACHE_ALL_STATIC 模式中,預設存留時間會套用至來源提供的快取內容,適用於回應中未設定有效存留時間 (max-ages-maxageExpires 標頭) 的情況。在 CACHE_ALL_STATIC 模式中,預設 TTL 不會修改提供給用戶端的 Cache-Control 標頭。如要在 CACHE_ALL_STATIC 模式中修改 Cache-Control 標頭,您必須設定 用戶端 TTL

當您將快取模式設為使用來源標頭 (USE_ORIGIN_HEADERS) 時,Cloud CDN 會改用 max-ages-maxage 來源指示或 Expires 標頭,因此預設的 TTL 值不會套用,也無法設定。

控制台

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

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

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「編輯」圖示
  4. 在「後端設定」中選取後端,然後按一下「編輯」圖示
  5. 確認已選取「Enable Cloud CDN」
  6. 請確認快取模式為「快取靜態內容 (建議做法)」或「強制快取所有內容」。當快取模式為「Use origin settings based on Cache-Control headers」時,系統不支援覆寫 TTL 值。
  7. 在「預設生命週期」下方,選取所需值。
  8. 按一下 [儲存]

gcloud

針對後端服務,請使用 gcloud compute backend-services creategcloud compute backend-services update 指令,並加上 --default-ttl 旗標。

如為後端資料集,請使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令搭配 --default-ttl 旗標。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --default-ttl=DEFAULT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --default-ttl=DEFAULT_TTL

DEFAULT_TTL 替換為最多 31,622,400 秒 (1 年) 的值。

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": {
  "defaultTtl": DEFAULT_TTL
}

DEFAULT_TTL 替換為最多 31,622,400 秒 (1 年) 的值。

設定存留時間上限

存留時間上限 (max) 是指 Cloud CDN 中允許的存留時間上限,適用於來源提供的快取內容。

如果滿足下列任一條件,回應的存留時間上限就會受到存留時間上限的限制:

  • 回應嘗試設定的 max-ages-maxage 高於存留時間上限值。
  • 回應中含有 Expires 標頭,該標頭的時間超過 cdnPolicy.maxTtl 秒。

存留時間上限設定不會變更傳送至用戶端的 max-age 值。如需更多資訊,請參閱「覆寫用戶端存留時間上限」。最大 TTL 設定只會影響 Cloud CDN 嘗試快取內容的時間長度。

只有在快取模式為 CACHE_ALL_STATIC 時,才會使用這項設定。允許的最大值為 31,622,400 秒 (1 年)。請注意,不常存取的物件可能會在定義的 TTL 到期前從快取中移除。

使用 FORCE_CACHE_ALL 時,TTL 一律會設為預設 TTL;您無法設定存留時間上限。

控制台

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

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

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「編輯」圖示
  4. 在「後端設定」中選取後端,然後按一下「編輯」圖示
  5. 確認已選取「Enable Cloud CDN」
  6. 確認快取模式為「快取靜態內容 (建議做法)」
  7. 在「存留時間上限」下方,選取所需值。
  8. 按一下 [儲存]

gcloud

針對後端服務,請使用 gcloud compute backend-services creategcloud compute backend-services update 指令,並加上 --max-ttl 旗標。

如為後端資料集,請使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令,並加上 --max-ttl 旗標。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --max-ttl=MAX_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --max-ttl=MAX_TTL

MAX_TTL 替換為最多 31,622,400 秒 (1 年) 的值。

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": {
  "maxTtl": MAX_TTL
}

MAX_TTL 替換為最多 31,622,400 秒 (1 年) 的值。

覆寫用戶端存留時間

對於所有快取模式,Cloud CDN 會將 Cache-Control 標頭傳遞給用戶端。

您可以使用用戶端 TTL 為傳送至瀏覽器或用戶端的內容設定最大 TTL,讓用戶端更頻繁地對 Cloud CDN 重新驗證內容,而不需要在來源重新驗證。這樣一來,在必要時,Cloud CDN 就能使內容失效,瀏覽器也能發現內容在用戶端 TTL 到期後失效。

FORCE_CACHE_ALL 模式中,Cloud CDN 通常會將相同的 max-age 傳遞給用戶端,用於內部快取代理;不過,如果指定的用戶端 TTL 較小,系統會改為在 max-age 指令中將用戶端 TTL 傳遞給用戶端。同樣地,在 CACHE_ALL_STATIC 模式中,用戶端存留時間會做為夾持器,用於限制來源伺服器指定的 max-age,以便傳送至瀏覽器或用戶端的 max-age 不會大於設定的用戶端存留時間。如果來源未指定 max-age,系統會使用 Cloud CDN 的 TTL 和用戶端 TTL 值中較小的值,做為傳送至瀏覽器或用戶端的 max-age

如果原始回應中含有 Expires 標頭,系統會將其移除,並以含有適當 TTL 的 Cache-Control: max-age 指示詞取代。對於錯誤回應,如果未設定負面快取 TTL,系統也會移除 Cache-Control 標頭。

由於用戶端 TTL 會視為傳送至瀏覽器或用戶端的最大值,因此無法用於增加原本會傳送的 max-age 值。如果傳送至瀏覽器和用戶端的 max-age 值低於預期,您必須在來源傳回的回應中提高 max-age 指令值,或適當調整預設 TTL負面快取設定。

一般來說,用戶端 TTL 設定約為一天,是實用上較佳的上限。設定為一天,表示瀏覽器至少會以這個頻率檢查,並可瞭解 Cloud CDN 中可能發生的快取撤銷情形。您可以將用戶端 TTL 設為更長的時間 (最多一年),讓來源和設定的 TTL 完全控管傳送至用戶端的內容。如果您不希望瀏覽器頻繁對 Cloud CDN 進行驗證,這個選項就很實用。

控制台

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

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

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「編輯」圖示
  4. 在「後端設定」中選取後端,然後按一下「編輯」圖示
  5. 確認已選取「Enable Cloud CDN」
  6. 請確認快取模式為「快取靜態內容 (建議做法)」或「強制快取所有內容」。當快取模式為「Use origin settings based on Cache-Control headers」時,系統不支援覆寫 TTL 值。
  7. 在「用戶端存留時間」下方,選取最多 1 年的值。
  8. 按一下 [儲存]

gcloud

針對後端服務,請使用 gcloud compute backend-services creategcloud compute backend-services update 指令,並加上 --client-ttl 旗標。

如為後端資料集,請使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 指令搭配 --client-ttl 旗標。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --client-ttl=CLIENT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --client-ttl=CLIENT_TTL

CLIENT_TTL 替換為最多 31,622,400 秒 (1 年) 的值。

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": {
  "clientTtl": CLIENT_TTL
}

CLIENT_TTL 替換為最多 31,622,400 秒 (1 年) 的值。

後續步驟