本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過快取標籤使內容失效
Amazon CloudFront 支援標籤失效,可讓您根據語意標籤而非 URL 路徑使快取的物件失效。這可讓您靈活控制快取失效,而不需要 URL 結構與您的失效策略相符。
標籤失效的運作方式
-
設定分佈:將
CacheTagConfig新增至分佈,指定原始伺服器用來傳回快取標籤的 HTTP 標頭名稱。 -
原始伺服器的標籤物件:當傳回您要使用標籤快取的物件時,請將原始伺服器設定為在具有逗號分隔標籤值的 HTTP 回應中包含指定的標頭。
HTTP/1.1 200 OK Content-Type: text/html x-amz-meta-cache-tag: product:electronics, category:tv, brand:example Cache-Control: max-age=3600注意
對於 S3 原始伺服器,您可以將快取標籤連接至 S3 物件做為中繼資料。您可以使用您選擇的索引鍵 (例如:
cache-tag) 來新增中繼資料項目,並以逗號分隔的標籤清單做為值 (例如:product:electronics, category:tv, brand:example)。S3 會將物件中繼資料視為字首為 的回應標頭
x-amz-meta-<Key>,因此 的中繼資料金鑰cache-tag會傳回為x-amz-meta-cache-tag標頭。您可以在HeaderName中CacheTagConfig將 設定為x-amz-meta-cache-tag,以啟用傳送失效至這些標籤。注意
或者,您可以將原始伺服器回應 Lambda@Edge 函數連接至快取行為,以新增快取標籤標頭。如果使用 Lambda@Edge,標頭名稱不需要遵循
x-amz-meta-<Key>格式。 -
依標籤失效:使用具有
#字首的CreateInvalidationAPI,使具有指定標籤快取的所有物件失效。aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#product:electronics"這會使包含標籤 的所有快取物件失效
product:electronics,無論其 URL 路徑為何。
標籤格式要求
原始伺服器回應標頭值:
-
標籤在標頭值中以逗號分隔。
-
每個標籤前後的空格都會修剪。
-
tag1,tag2,tag3和 皆tag1, tag2, tag3有效且同等。
個別標籤值:
-
ASCII 可見字元 (33–126)
-
沒有控制字元、空格或逗號
-
不區分大小寫
-
每個標籤最多 256 個字元
-
每個物件最多 50 個標籤 (忽略其他標籤)
設定標籤失效的分佈
若要啟用標籤失效,請將 CacheTagConfig 新增至您的分佈組態:
aws cloudfront create-distribution \ --distribution-config '{ "CallerReference": "my-distribution", "CacheTagConfig": { "HeaderName": "x-amz-meta-cache-tag" }, "DefaultCacheBehavior": { "TargetOriginId": "myOrigin", "ViewerProtocolPolicy": "redirect-to-https", "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6" }, "Origins": { ... }, "Enabled": true, "Comment": "Distribution with tag support" }'
建立標籤失效
使用 --paths 參數中的 # 字首來指定標籤:
# Invalidate all objects tagged with "user1" aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#user1" # Invalidate objects matching any of multiple tags (OR logic) aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#user1" "#product-category:electronics" # Mix path and tag invalidations in one batch aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "/index.html" "#user1" "/images/*" "#product-category:electronics"
檢查失效狀態
使用 GetInvalidation 檢查狀態。回應包含路徑和標籤項目:
aws cloudfront get-invalidation \ --distribution-iddistribution_ID\ --idinvalidation_ID
重要考量
-
需要選擇加入:標籤失效僅適用於已
CacheTagConfig設定的分佈。沒有此組態的分佈會忽略來自原始伺服器的快取標籤標頭。 -
標籤處理限制:CloudFront 最多處理每個快取物件 50 個標籤。如果原始伺服器回應包含超過 50 個標籤,則不會儲存超出限制的其他標籤。
-
變更標頭名稱:會根據目前的
CacheTagConfig組態查詢標籤失效。如果您在HeaderName中變更CacheTagConfig,則對以舊標頭名稱下的標籤快取的物件發出的失效將不再進行評估。如果您需要變更標頭名稱,請開始在物件中同時傳回新的和舊的快取標籤標頭,然後發出路徑失效 (例如,/*) 或使現有標籤失效,再變更標頭名稱以避免提供過時的內容。完成後,您就可以停止傳送舊的快取標籤標頭與物件。 -
移除 CacheTagConfig:當您
CacheTagConfig從分佈中移除 時,CloudFront 會停止從原始伺服器回應擷取標籤。具有標籤的現有快取物件會正常提供,直到它們過期或因路徑而失效為止。 -
回溯相容性:現有的路徑和萬用字元失效會繼續保持不變。標籤失效是累加的 - 您可以在相同的分佈上使用這兩種方法。
-
分發租用戶:透過
CreateInvalidationForDistributionTenantAPI 分發租用戶也支援標籤失效。
使用案例範例
範例 1:電子商務產品目錄
電子商務網站標籤使用產品、類別和品牌快取產品頁面:
x-amz-meta-cache-tag: category:electronics, brand:acme, product:12345
當 ACME 更新其品牌時, 會立即使所有 ACME 產品失效:
aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#brand:acme"
範例 2:使用者產生的內容平台
平台使用擁有者的使用者 ID 標記快取的內容:
x-amz-meta-cache-tag: user:12345, content-type:image
當使用者關閉其帳戶時,請在從原始伺服器移除其所有內容後將其失效:
aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#user:12345"
範例 3:內容版本控制
CMS 會使用版本識別符來標記內容:
x-amz-meta-cache-tag: version:v2, template:homepage
部署新版本時,使所有 v2 內容失效:
aws cloudfront create-invalidation \ --distribution-iddistribution_ID\ --paths "#version:v2"