變更存留時間設定和覆寫

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

下表重點摘要存留時間設定。

  預設存留時間 存留時間上限 用戶端存留時間
設定原因 提高不常變更內容的快取命中率 強制 Cloud CDN 比來源標頭指定的頻率更常重新驗證內容 強制用戶端更常對 Cloud CDN 重新驗證內容
使用時機 如要成功回應,必須符合下列其中一項條件:
  • 快取模式 = FORCE_CACHE_ALL
  • 快取模式 = CACHE_ALL_STATIC、內容類型可靜態快取,且來源標頭 (max-ages-maxageExpires) 未設定存留時間
符合下列所有條件:
  • 快取模式 = CACHE_ALL_STATIC
  • 存留時間是由來源標頭 (max-ages-maxageExpires) 設定
  • 來源標頭中指定的存留時間大於存留時間上限值
符合下列其中一項條件:
  • 快取模式 = FORCE_CACHE_ALL,且用戶端存留時間值小於 Cloud CDN 的存留時間
  • 快取模式 = CACHE_ALL_STATIC,且用戶端存留時間小於來源標頭設定的存留時間 (或是如果沒有來源標頭資訊,則為預設存留時間)
預設值 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 會設定向用戶端提供回應的 publicmax-age 屬性。

CACHE_ALL_STATIC 模式下,如果回應沒有現有的有效存留時間 (max-ages-maxageExpires 標頭),系統會對來源提供的快取內容套用預設存留時間。在 CACHE_ALL_STATIC 模式中,預設存留時間不會修改向用戶端提供的 Cache-Control 標頭。如要在 CACHE_ALL_STATIC 模式中修改 Cache-Control 標頭,必須設定用戶端存留時間

將快取模式設為使用來源標頭 (USE_ORIGIN_HEADERS) 時,系統不會套用預設存留時間值,且無法設定該值,因為 Cloud CDN 會改用 max-ages-maxage 來源指令,或是 Expires 標頭。

控制台

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

    前往負載平衡

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「Edit」(編輯)
  4. 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)
  5. 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)
  6. 確認快取模式為「Cache static content (recommended)」(快取靜態內容 (建議)) 或「Force cache all content」(強制快取所有內容)。如果快取模式為「Use origin settings based on Cache-Control headers」(使用基於 Cache-Control 標頭的來源設定),則不支援覆寫存留時間值。
  7. 在「Default time to live」(預設存留時間) 下方選取值。
  8. 按一下「Save」(儲存)

gcloud

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

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

如為後端 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": {
  "defaultTtl": DEFAULT_TTL
}

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

設定存留時間上限

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

如果符合下列其中一項條件,回應的存留時間就會達到上限:

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

存留時間上限設定不會變更傳送給用戶端的 max-age 值;詳情請參閱「覆寫用戶端存留時間上限」。存留時間上限設定只會影響 Cloud CDN 嘗試快取內容的時間長度。

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

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

控制台

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

    前往負載平衡

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「Edit」(編輯)
  4. 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)
  5. 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)
  6. 確認快取模式為「Cache static content (recommended)」(快取靜態內容 (建議))
  7. 在「Maximum time to live」(存留時間上限) 下方選取值。
  8. 按一下「Save」(儲存)

gcloud

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

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

如為後端 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": {
  "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 執行驗證,這項功能即可派上用場。

控制台

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

    前往負載平衡

  2. 按一下外部應用程式負載平衡器的名稱。
  3. 按一下「Edit」(編輯)
  4. 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)
  5. 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)
  6. 確認快取模式為「Cache static content (recommended)」(快取靜態內容 (建議)) 或「Force cache all content」(強制快取所有內容)。如果快取模式為「Use origin settings based on Cache-Control headers」(使用基於 Cache-Control 標頭的來源設定),則不支援覆寫存留時間值。
  7. 在「Client time to live」(用戶端存留時間) 下方,選取最多 1 年的值。
  8. 按一下「Save」(儲存)

gcloud

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

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

如為後端 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": {
  "clientTtl": CLIENT_TTL
}

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

後續步驟