本頁說明如何使用 Cloud CDN 變更 TTL 覆寫值。您可以透過 TTL 覆寫值,精細控管 Cloud CDN 快取內容的時間長度,以便重新驗證內容。
下表匯總了 TTL 設定。
預設存留時間 | 存留時間上限 | 用戶端存留時間 | |
---|---|---|---|
設定原因 | 改善不常變更的內容快取命中率 | 強制 Cloud CDN 比來源標頭指定的頻率更頻繁地重新驗證內容 | 強制用戶端更頻繁地對 Cloud CDN 重新驗證內容 |
用於以下情況: | 成功回應的情況下,下列任一項為真:
|
符合下列所有條件:
|
下列其中一個為真:
|
預設值 | 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 會為用戶端提供的回應設定 public
和 max-age
屬性,因此用戶端可查看預設的 TTL。
在 CACHE_ALL_STATIC
模式中,預設存留時間會套用至來源提供的快取內容,適用於回應中未設定有效存留時間 (max-age
、s-maxage
或 Expires
標頭) 的情況。在 CACHE_ALL_STATIC
模式中,預設 TTL 不會修改提供給用戶端的 Cache-Control
標頭。如要在 CACHE_ALL_STATIC
模式中修改 Cache-Control
標頭,您必須設定 用戶端 TTL。
當您將快取模式設為使用來源標頭 (USE_ORIGIN_HEADERS
) 時,Cloud CDN 會改用 max-age
或 s-maxage
來源指示或 Expires
標頭,因此預設的 TTL 值不會套用,也無法設定。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 在「後端設定」中選取後端,然後按一下「編輯」圖示 。
- 確認已選取「Enable Cloud CDN」。
- 請確認快取模式為「快取靜態內容 (建議做法)」或「強制快取所有內容」。當快取模式為「Use origin settings based on Cache-Control headers」時,系統不支援覆寫 TTL 值。
- 在「預設生命週期」下方,選取所需值。
- 按一下 [儲存]。
gcloud
針對後端服務,請使用 gcloud compute backend-services
create
或 gcloud compute backend-services
update
指令,並加上 --default-ttl
旗標。
如為後端資料集,請使用 gcloud compute backend-buckets
create
或 gcloud 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.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": { "defaultTtl": DEFAULT_TTL }
將 DEFAULT_TTL
替換為最多 31,622,400 秒 (1 年) 的值。
設定存留時間上限
存留時間上限 (max) 是指 Cloud CDN 中允許的存留時間上限,適用於來源提供的快取內容。
如果滿足下列任一條件,回應的存留時間上限就會受到存留時間上限的限制:
- 回應嘗試設定的
max-age
或s-maxage
高於存留時間上限值。 - 回應中含有
Expires
標頭,該標頭的時間超過cdnPolicy.maxTtl
秒。
存留時間上限設定不會變更傳送至用戶端的 max-age
值。如需更多資訊,請參閱「覆寫用戶端存留時間上限」。最大 TTL 設定只會影響 Cloud CDN 嘗試快取內容的時間長度。
只有在快取模式為 CACHE_ALL_STATIC
時,才會使用這項設定。允許的最大值為 31,622,400 秒 (1 年)。請注意,不常存取的物件可能會在定義的 TTL 到期前從快取中移除。
使用 FORCE_CACHE_ALL
時,TTL 一律會設為預設 TTL;您無法設定存留時間上限。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 在「後端設定」中選取後端,然後按一下「編輯」圖示 。
- 確認已選取「Enable Cloud CDN」。
- 確認快取模式為「快取靜態內容 (建議做法)」。
- 在「存留時間上限」下方,選取所需值。
- 按一下 [儲存]。
gcloud
針對後端服務,請使用 gcloud compute backend-services
create
或 gcloud compute backend-services
update
指令,並加上 --max-ttl
旗標。
如為後端資料集,請使用 gcloud compute backend-buckets
create
或 gcloud 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.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": { "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 進行驗證,這個選項就很實用。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 在「後端設定」中選取後端,然後按一下「編輯」圖示 。
- 確認已選取「Enable Cloud CDN」。
- 請確認快取模式為「快取靜態內容 (建議做法)」或「強制快取所有內容」。當快取模式為「Use origin settings based on Cache-Control headers」時,系統不支援覆寫 TTL 值。
- 在「用戶端存留時間」下方,選取最多 1 年的值。
- 按一下 [儲存]。
gcloud
針對後端服務,請使用 gcloud compute backend-services
create
或 gcloud compute backend-services
update
指令,並加上 --client-ttl
旗標。
如為後端資料集,請使用 gcloud compute backend-buckets
create
或 gcloud 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.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": { "clientTtl": CLIENT_TTL }
將 CLIENT_TTL
替換為最多 31,622,400 秒 (1 年) 的值。
後續步驟
- 如要瞭解提供過時內容的原因,請參閱「提供過時內容」。