本頁面說明如何使用 Cloud CDN 變更存留時間覆寫。您可以透過存留時間覆寫,精細控管 Cloud CDN 快取內容的時間長度,再重新驗證內容。
下表重點摘要存留時間設定。
| 預設存留時間 | 存留時間上限 | 用戶端存留時間 | |
|---|---|---|---|
| 設定原因 | 提高不常變更內容的快取命中率 | 強制 Cloud CDN 比來源標頭指定的頻率更常重新驗證內容 | 強制用戶端更常對 Cloud CDN 重新驗證內容 |
| 使用時機 | 如要成功回應,必須符合下列其中一項條件:
|
符合下列所有條件:
|
符合下列其中一項條件:
|
| 預設值 | 3,600 秒 (1 小時) | 86,400 秒 (1 天) | 3,600 秒 (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
設定預設存留時間
如要提高不常變更內容的快取命中率,可以覆寫預設存留時間,讓 Cloud CDN 減少在來源重新驗證內容的頻率。請注意,不常存取的物件可能會在定義的存留時間前從快取中剔除。
當快取模式為 FORCE_CACHE_ALL 時,預設存留時間會覆寫所有回應中設定的存留時間 (包括來源標頭設定存留時間的回應)。在這個模式中,用戶端會看到預設存留時間,因為 Cloud CDN 會設定向用戶端提供回應的 public 和 max-age 屬性。
在 CACHE_ALL_STATIC 模式下,如果回應沒有現有的有效存留時間 (max-age、s-maxage 或 Expires 標頭),系統會對來源提供的快取內容套用預設存留時間。在 CACHE_ALL_STATIC 模式中,預設存留時間不會修改向用戶端提供的 Cache-Control 標頭。如要在 CACHE_ALL_STATIC 模式中修改 Cache-Control 標頭,必須設定用戶端存留時間。
將快取模式設為使用來源標頭 (USE_ORIGIN_HEADERS) 時,系統不會套用預設存留時間值,且無法設定該值,因為 Cloud CDN 會改用 max-age 或 s-maxage 來源指令,或是 Expires 標頭。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「Edit」(編輯)。
- 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)。
- 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)。
- 確認快取模式為「Cache static content (recommended)」(快取靜態內容 (建議)) 或「Force cache all content」(強制快取所有內容)。如果快取模式為「Use origin settings based on Cache-Control headers」(使用基於 Cache-Control 標頭的來源設定),則不支援覆寫存留時間值。
- 在「Default time to live」(預設存留時間) 下方選取值。
- 按一下「Save」(儲存)。
gcloud
如為後端服務,請使用 gcloud compute backend-services
create 或 gcloud compute backend-services
update 指令,並加上 --default-ttl 旗標。
如為後端 bucket,請使用 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
如為後端 bucket,請使用 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 值;詳情請參閱「覆寫用戶端存留時間上限」。存留時間上限設定只會影響 Cloud CDN 嘗試快取內容的時間長度。
只有在快取模式為 CACHE_ALL_STATIC 時,才會使用這項設定。最大允許值為 31,622,400 秒 (1 年)。請注意,不常存取的物件可能會在定義的存留時間前從快取中剔除。
使用 FORCE_CACHE_ALL 時,存留時間一律會設為預設存留時間,無法設定存留時間上限。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「Edit」(編輯)。
- 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)。
- 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)。
- 確認快取模式為「Cache static content (recommended)」(快取靜態內容 (建議))。
- 在「Maximum time to live」(存留時間上限) 下方選取值。
- 按一下「Save」(儲存)。
gcloud
如為後端服務,請使用 gcloud compute backend-services
create 或 gcloud compute backend-services
update 指令,並加上 --max-ttl 旗標。
如為後端 bucket,請使用 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
如為後端 bucket,請使用 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 標頭傳遞給用戶端。
您可以透過用戶端存留時間,為傳送至瀏覽器或用戶端的內容設定存留時間上限,讓用戶端更常對 Cloud CDN 重新驗證內容,不需要重新驗證來源。這樣一來,必要時即可在 Cloud CDN 內使內容失效,瀏覽器也能在用戶端存留時間到期後,立即發現內容已失效。
在 FORCE_CACHE_ALL 模式中,Cloud CDN 通常會將內部用於 Proxy 快取的相同 max-age 傳遞給用戶端;不過,如果指定用戶端存留時間,且該值較小,系統會改為在 max-age 指令中將用戶端存留時間傳遞給用戶端。同樣地,在 CACHE_ALL_STATIC 模式中,用戶端存留時間會做為來源伺服器指定任何 max-age 的限制取值範圍,因此傳送至瀏覽器或用戶端的 max-age 不會大於設定的用戶端存留時間。如果來源未指定 max-age,系統會使用 Cloud CDN 的存留時間和用戶端存留時間值中較小的值,做為傳送至瀏覽器或用戶端的 max-age。
如果原始回應中含有 Expires 標頭,系統會移除該標頭,並替換為含有適當存留時間的 Cache-Control: max-age 指令。如為錯誤回應,且未設定 negative caching 存留時間,系統也會移除 Cache-Control 標頭。
由於用戶端存留時間會視為傳送至瀏覽器或用戶端的上限值,因此無法用於增加原本會傳送的 max-age 值。如果傳送至瀏覽器和用戶端的 max-age 值低於預期,您必須在來源傳回的回應中提高 max-age 指令值,或適當調整預設存留時間或 negative caching 設定。
一般來說,將用戶端存留時間設定為大約一天,是實用的上限。如果設定為一天,表示瀏覽器至少會以該頻率回報,並瞭解 Cloud CDN 中可能發生的快取撤銷作業。您可以將用戶端存留時間設得更高 (最多一年),讓來源和設定的存留時間完全控管傳送給用戶端的內容。如果您不希望瀏覽器更頻繁對 Cloud CDN 執行驗證,這項功能即可派上用場。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「Edit」(編輯)。
- 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)。
- 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)。
- 確認快取模式為「Cache static content (recommended)」(快取靜態內容 (建議)) 或「Force cache all content」(強制快取所有內容)。如果快取模式為「Use origin settings based on Cache-Control headers」(使用基於 Cache-Control 標頭的來源設定),則不支援覆寫存留時間值。
- 在「Client time to live」(用戶端存留時間) 下方,選取最多 1 年的值。
- 按一下「Save」(儲存)。
gcloud
如為後端服務,請使用 gcloud compute backend-services
create 或 gcloud compute backend-services
update 指令,並加上 --client-ttl 旗標。
如為後端 bucket,請使用 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
如為後端 bucket,請使用 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 年) 的值。
後續步驟
- 如要瞭解提供過時內容的原因,請參閱「提供過時內容」。