本頁面提供如何搭配 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) 的要求,就像防範產生成功回應的要求一樣。
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「Edit」(編輯)。
- 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)。
- 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)。
- 按一下視窗底部的「Advanced configurations」(進階設定)。
- 按一下「Enable negative caching」(啟用 negative caching)。
- 按一下「Add negative caching policy」(新增 negative caching 政策)。
- 輸入 HTTP 狀態碼。
- 選取「Cache time to live (TTL)」(快取存留時間 (TTL))。
- 按一下「Update」(更新)。
- 再按一下「Update」(更新)。
gcloud
如為後端 bucket,請使用 gcloud compute backend-buckets create 或 gcloud compute backend-buckets update 指令,並加上 --negative-caching 旗標。
如為後端服務,請使用 gcloud compute backend-services create 或 gcloud 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.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": {
"negativeCaching": ON,
"negativeCachingPolicy": [
{
"code": STATUS_CODE,
"ttl": TTL_SECONDS
}
]
}
必須啟用 negative caching,才能設定 negativeCachingPolicy 設定。如果您省略這項政策並啟用 negativeCaching,Cloud CDN 會使用「狀態碼和預設存留時間」中列出的預設值。
指定 negative caching 政策時,請務必為「所有」要快取的回應代碼指定快取存留時間。如果存在政策,Cloud CDN 就不會套用任何預設 negative caching。
您可以為 STATUS_CODE 指定下列 HTTP 狀態碼:
300、301、302、307、308404、405、410、421、451501
您可以為每個狀態碼指定快取回應的秒數。如要停用狀態碼的 negative caching,請從 negative caching 政策中排除該代碼。
最大允許值為 1800 秒 (30 分鐘),但如果物件不常存取,可能會在定義的存留時間前從快取中剔除。
當快取模式設為 CACHE_ALL_STATIC 或 USE_ORIGIN_HEADERS 時,negative caching 會套用至具有指定回應代碼且缺少 Cache-Control 或 Expires 標頭的回應。
快取模式設為 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-Control 或 Expires 標頭,判斷快取錯誤回應是否有效。因此,停用 negative caching 後,系統不會從快取提供標頭中沒有快取時間指令的回應。
Cloud CDN 會快取回應 GET 要求。詳情請參閱「可快取的內容」。
每個快取項目都是透過一組快取金鑰來識別。
停用 negative caching
控制台
- 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。
- 按一下外部應用程式負載平衡器的名稱。
- 按一下「Edit」(編輯)。
- 在「Backend configuration」(後端設定) 中選取後端,然後按一下「Edit」(編輯)。
- 確認已選取「Enable Cloud CDN」(啟用 Cloud CDN)。
- 按一下視窗底部的「Advanced configurations」(進階設定)。
- 取消勾選「Enable negative caching」(啟用負面快取) 旁的核取方塊。
- 按一下「Update」(更新)。
- 再按一下「Update」(更新)。
gcloud
如為後端 bucket,請使用 gcloud compute backend-buckets create 或 gcloud compute backend-buckets update 指令,並加上 --no-negative-caching 旗標。
如為後端服務,請使用 gcloud compute backend-services create 或 gcloud 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.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": {
"negativeCaching": OFF
}