如何清除CDN快取
瞭解如何從AEM as a Cloud Service的CDN中清除或移除快取的HTTP回應。 使用名為 清除API Token 的自助服務功能,您可以清除特定資源、資源群組和整個快取的快取。
在本教學課程中,您將瞭解如何使用自助服務功能,設定及使用Purge API Token來清除範例AEM WKND網站的CDN快取。
快取失效vs明確清除
有兩種方法可從CDN移除快取資源:
-
快取失效: 這是根據快取標題(如
Cache-Control
、Surrogate-Control
或Expires
)從CDN移除快取資源的程式。 快取標頭的max-age
屬性值是用來決定資源的快取存留期,也稱為快取TTL (存留時間)。 快取存留期過期時,系統會自動從CDN快取中移除快取資源。 -
明確清除: 這是在TTL到期之前,從CDN快取中手動移除快取資源的程式。 當您想要立即移除快取的資源時,明確清除會很有用。 但是,它會增加到原始伺服器的流量。
從CDN快取中移除快取的資源時,同一資源的下一個請求會從原始伺服器擷取最新版本。
設定清除API Token
讓我們瞭解如何設定清除API權杖以清除CDN快取。
設定CDN規則
清除API Token的建立方式是在AEM專案程式碼中設定CDN規則。
-
從AEM專案的主要
config
資料夾開啟cdn.yaml
檔案。 例如,WKND專案的cdn.yaml檔案。 -
將下列CDN規則新增至
cdn.yaml
檔案:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev", "stage", "prod"]
data:
authentication: # The main authentication configuration
authenticators: # The list of authenticators
- name: purge-auth # The name of the authenticator
type: purge # The type of the authenticator, must be purge
purgeKey1: ${{CDN_PURGEKEY_081324}} # The first purge key, must be referenced by the Cloud Manager secret-type environment variable name ${{CDN_EDGEKEY_073124}}
purgeKey2: ${{CDN_PURGEKEY_111324}} # The second purge key, must be referenced by the Cloud Manager secret-type environment variable name ${{CDN_EDGEKEY_111324}}. It is used for the rotation of secrets without any interruptions.
rules: # The list of authentication rules
- name: purge-auth-rule # The name of the rule
when: { reqProperty: tier, equals: "publish" } # The condition when the rule should be applied
action: # The action to be taken when the rule is applied
type: authenticate # The type of the action, must be authenticate
authenticator: purge-auth # The name of the authenticator to be used, must match the name from the above authenticators list
在上述規則中,purgeKey1
和purgeKey2
都是從頭開始新增,以支援密碼輪換而不會造成任何中斷。 但是,您只能從purgeKey1
開始,並在稍後旋轉密碼時新增purgeKey2
。
- 儲存、提交變更,並將其推送至Adobe上游存放庫。
建立Cloud Manager環境變數
接下來,建立Cloud Manager環境變數來儲存「清除API Token」值。
-
在my.cloudmanager.adobe.com登入Cloud Manager並選取您的組織和程式。
-
在 環境 區段中,按一下所需環境旁的 省略符號 (…),並選取 檢視詳細資料。
-
然後選取 組態 索引標籤,再按一下 新增組態 按鈕。
-
在 環境組態 對話方塊中,輸入下列詳細資料:
- 名稱:輸入環境變數的名稱。 它必須符合
cdn.yaml
檔案中的purgeKey1
或purgeKey2
值。 - 值:輸入清除API Token值。
- 已套用服務:選取 全部 選項。
- 型別:選取 密碼 選項。
- 按一下 新增 按鈕。
- 名稱:輸入環境變數的名稱。 它必須符合
-
重複上述步驟,為
purgeKey2
值建立第二個環境變數。 -
按一下[儲存]以儲存並套用變更。
部署CDN規則
最後,透過Cloud Manager管道將已設定的CDN規則部署至AEM as a Cloud Service環境。
-
在Cloud Manager中,導覽至 管道 區段。
-
建立新管道或選取僅部署 Config 檔案的現有管道。 如需詳細步驟,請參閱建立設定管道。
-
按一下 執行 按鈕以部署CDN規則。
使用清除API Token
若要清除CDN快取,請使用清除API權杖叫用AEM服務特定的網域URL。 清除快取的語法如下:
PURGE <URL> HTTP/1.1
Host: <AEM_SERVICE_SPECIFIC_DOMAIN>
X-AEM-Purge-Key: <PURGE_API_TOKEN>
X-AEM-Purge: <PURGE_TYPE>
Surrogate-Key: <SURROGATE_KEY>
其中:
-
清除
<URL>
:PURGE
方法後面接著您要清除之資源的URL路徑。 -
主機:
<AEM_SERVICE_SPECIFIC_DOMAIN>
:它指定AEM服務的網域。 -
X-AEM-Purge-Key:
<PURGE_API_TOKEN>
:包含清除API Token值的自訂標頭。 -
X-AEM-Purge:
<PURGE_TYPE>
:指定清除作業型別的自訂標頭。 值可以是hard
、soft
或all
。 下表說明每種永久刪除型別:table 0-row-2 1-row-2 2-row-2 3-row-2 1-align-center 2-align-center 4-align-center 5-align-center 7-align-center 8-align-center 10-align-center 11-align-center 清除型別 說明 hard (預設) 立即移除快取的資源。 避免使用它,因為它會增加流向原始伺服器的流量。 柔和 將快取的資源標示為過時,並從原始伺服器擷取最新版本。 全部 從CDN快取中移除所有快取的資源。 -
Surrogate-Key:
<SURROGATE_KEY>
: (選擇性)指定要清除之資源群組的代理金鑰(以空格分隔)的自訂標頭。 替代索引鍵是用來將資源分組,且必須在資源的回應標題中設定。
X-AEM-Purge: hard
是用於示範用途。 您可以根據您的需求,以soft
或all
取代。 使用hard
清除型別時,請務必小心,因為它會增加原始伺服器的流量。清除特定資源的快取
在此範例中,在AEM as a Cloud Service環境中部署的WKND站台上,curl
命令會清除/us/en.html
資源的快取。
curl -X PURGE "https://publish-p46652-e1315806.adobeaemcloud.com/us/en.html" \
-H "X-AEM-Purge-Key: 123456789" \
-H "X-AEM-Purge: hard"
成功清除後,會傳回JSON內容的200 OK
回應。
{ "status": "ok", "id": "1000098-1722961031-13237063" }
清除資源群組的快取
在此範例中,curl
命令會清除具有代理機碼wknd-assets
的資源群組的快取。 Surrogate-Key
回應標頭設定在wknd.vhost
中,例如:
<VirtualHost *:80>
...
# Core Component Image Component: long-term caching (30 days) for immutable URLs, background refresh to avoid MISS
<LocationMatch "^/content/.*\.coreimg.*\.(?i:jpe?g|png|gif|svg)$">
Header set Cache-Control "max-age=2592000,stale-while-revalidate=43200,stale-if-error=43200,public,immutable" "expr=%{REQUEST_STATUS} < 400"
# Set Surrogate-Key header to group the cache of WKND assets, thus it can be flushed independtly
Header set Surrogate-Key "wknd-assets"
Header set Age 0
</LocationMatch>
...
</VirtualHost>
curl -X PURGE "https://publish-p46652-e1315806.adobeaemcloud.com" \
-H "Surrogate-Key: wknd-assets" \
-H "X-AEM-Purge-Key: 123456789" \
-H "X-AEM-Purge: hard"
成功清除後,會傳回JSON內容的200 OK
回應。
{ "wknd-assets": "10027-1723478994-2597809-1" }
清除整個快取
在此範例中,使用curl
命令會從部署在AEM as a Cloud Service環境上的範例WKND網站中清除整個快取。
curl -X PURGE "https://publish-p46652-e1315806.adobeaemcloud.com/" \
-H "X-AEM-Purge-Key: 123456789" \
-H "X-AEM-Purge: all"
成功清除後,會傳回JSON內容的200 OK
回應。
{"status":"ok"}
驗證快取清除
若要驗證快取清除,請存取網頁瀏覽器中的資源URL並檢閱回應標頭。 X-Cache
標頭值應為MISS
。