如何清除CDN快取

瞭解如何從AEM as a Cloud Service的CDN中清除或移除快取的HTTP回應。 使用名為​ 清除API Token ​的自助服務功能,您可以清除特定資源、資源群組和整個快取的快取。

在本教學課程中,您將瞭解如何使用自助服務功能,設定及使用Purge API Token來清除範例AEM WKND網站的CDN快取。

快取失效vs明確清除

有兩種方法可從CDN移除快取資源:

  1. 快取失效: ​這是根據快取標題(如Cache-ControlSurrogate-ControlExpires)從CDN移除快取資源的程式。 快取標頭的max-age屬性值是用來決定資源的快取存留期,也稱為快取TTL (存留時間)。 快取存留期過期時,系統會自動從CDN快取中移除快取資源。

  2. 明確清除: ​這是在TTL到期之前,從CDN快取中手動移除快取資源的程式。 當您想要立即移除快取的資源時,明確清除會很有用。 但是,它會增加到原始伺服器的流量。

從CDN快取中移除快取的資源時,同一資源的下一個請求會從原始伺服器擷取最新版本。

設定清除API Token

讓我們瞭解如何設定清除API權杖以清除CDN快取。

設定CDN規則

清除API Token的建立方式是在AEM專案程式碼中設定CDN規則。

  1. 從AEM專案的主要config資料夾開啟cdn.yaml檔案。 例如,WKND專案的cdn.yaml檔案。

  2. 將下列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

在上述規則中,purgeKey1purgeKey2都是從頭開始新增,以支援密碼輪換而不會造成任何中斷。 但是,您只能從purgeKey1開始,並在稍後旋轉密碼時新增purgeKey2

  1. 儲存、提交變更,並將其推送至Adobe上游存放庫。

建立Cloud Manager環境變數

接下來,建立Cloud Manager環境變數來儲存「清除API Token」值。

  1. my.cloudmanager.adobe.com登入Cloud Manager並選取您的組織和程式。

  2. 在​ 環境 ​區段中,按一下所需環境旁的​ 省略符號 (…),並選取​ 檢視詳細資料

    檢視詳細資料

  3. 然後選取​ 組態 ​索引標籤,再按一下​ 新增組態 ​按鈕。

  4. 在​ 環境組態 ​對話方塊中,輸入下列詳細資料:

    • 名稱:輸入環境變數的名稱。 它必須符合cdn.yaml檔案中的purgeKey1purgeKey2值。
    • :輸入清除API Token值。
    • 已套用服務:選取​ 全部 ​選項。
    • 型別:選取​ 密碼 ​選項。
    • 按一下​ 新增 ​按鈕。

    新增變數

  5. 重複上述步驟,為purgeKey2值建立第二個環境變數。

  6. 按一下[儲存]以儲存並套用變更。

部署CDN規則

最後,透過Cloud Manager管道將已設定的CDN規則部署至AEM as a Cloud Service環境。

  1. 在Cloud Manager中,導覽至​ 管道 ​區段。

  2. 建立新管道或選取僅部署​ Config ​檔案的現有管道。 如需詳細步驟,請參閱建立設定管道

  3. 按一下​ 執行 ​按鈕以部署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>:指定清除作業型別的自訂標頭。 值可以是hardsoftall。 下表說明每種永久刪除型別:

    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>: (選擇性)指定要清除之資源群組的代理金鑰(以空格分隔)的自訂標頭。 替代索引鍵是用來將資源分組,且必須在資源的回應標題中設定。

TIP
在下列範例中,X-AEM-Purge: hard是用於示範用途。 您可以根據您的需求,以softall取代。 使用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

X-Cache標頭

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69