如何清除CDN缓存

了解如何从AEM as a Cloud Service的CDN中清除或删除缓存的HTTP响应。 使用名为​ 清除API令牌 ​的自助服务功能,可以清除特定资源、一组资源和整个缓存的缓存。

在本教程中,您将学习如何使用自助服务功能设置和使用Purge API Token清除示例AEM WKND站点的CDN缓存。

缓存失效与显式清除

有两种方法可从CDN中删除缓存的资源:

  1. 缓存失效: ​它是基于缓存标头(如Cache-ControlSurrogate-ControlExpires)从CDN中删除缓存资源的进程。 缓存标头的max-age属性值用于确定资源的缓存生命周期,也称为缓存TTL(生存时间)。 当缓存生命周期过期时,缓存的资源将自动从CDN缓存中删除。

  2. 显式清除: ​它是在TTL过期之前从CDN缓存中手动删除缓存资源的过程。 显式清除在要立即删除缓存的资源时很有用。 但是,它会增加到源服务器的流量。

当从CDN缓存中删除缓存的资源时,对同一资源的下一个请求将从源服务器获取最新版本。

设置清除API令牌

让我们了解如何设置清除API令牌以清除CDN缓存。

配置CDN规则

清除API令牌是通过在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令牌值。

  1. my.cloudmanager.adobe.com登录Cloud Manager并选择您的组织和程序。

  2. 在​ 环境 ​部分中,单击所需环境旁边的​ 省略号 (…),然后选择​ 查看详细信息

    查看详细信息

  3. 然后选择​ 配置 ​选项卡并单击​ 添加配置 ​按钮。

  4. 在​ 环境配置 ​对话框中,输入以下详细信息:

    • 名称:输入环境变量的名称。 它必须匹配cdn.yaml文件中的purgeKey1purgeKey2值。
    • :输入清除API令牌值。
    • 已应用​ 服务:选择​ 全部 ​选项。
    • 类型:选择​ 密钥 ​选项。
    • 单击​ 添加 ​按钮。

    添加变量

  5. 重复上述步骤为purgeKey2值创建第二个环境变量。

  6. 单击​ 保存 ​以保存并应用更改。

部署CDN规则

最后,使用Cloud Manager管道将配置的CDN规则部署到AEM as a Cloud Service环境。

  1. 在Cloud Manager中,导航到​ 管道 ​部分。

  2. 创建新管道或选择仅部署​ Config ​文件的现有管道。 有关详细步骤,请参阅创建配置管道

  3. 单击​ 运行 ​按钮以部署CDN规则。

    运行管道

使用清除API令牌

要清除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令牌值的自定义标头。

  • 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清除类型时,请务必小心,因为它会增加到源服务器的流量。

清除特定资源的缓存

在此示例中,curl命令为部署在AEM as a Cloud Service环境中的WKND站点上的/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"}

验证缓存清除

要验证缓存清除,请访问Web浏览器中的资源URL并查看响应标头。 X-Cache标头值应为MISS

X缓存标头

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