如何清除CDN缓存
了解如何从AEM as a Cloud Service的CDN中清除或删除缓存的HTTP响应。 使用名为 清除API令牌 的自助服务功能,可以清除特定资源、一组资源和整个缓存的缓存。
在本教程中,您将学习如何使用自助服务功能设置和使用Purge API Token清除示例AEM WKND站点的CDN缓存。
缓存失效与显式清除
有两种方法可从CDN中删除缓存的资源:
-
缓存失效: 它是基于缓存标头(如
Cache-Control
、Surrogate-Control
或Expires
)从CDN中删除缓存资源的进程。 缓存标头的max-age
属性值用于确定资源的缓存生命周期,也称为缓存TTL(生存时间)。 当缓存生命周期过期时,缓存的资源将自动从CDN缓存中删除。 -
显式清除: 它是在TTL过期之前从CDN缓存中手动删除缓存资源的过程。 显式清除在要立即删除缓存的资源时很有用。 但是,它会增加到源服务器的流量。
当从CDN缓存中删除缓存的资源时,对同一资源的下一个请求将从源服务器获取最新版本。
设置清除API令牌
让我们了解如何设置清除API令牌以清除CDN缓存。
配置CDN规则
清除API令牌是通过在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令牌值。
-
在my.cloudmanager.adobe.com登录Cloud Manager并选择您的组织和程序。
-
在 环境 部分中,单击所需环境旁边的 省略号 (…),然后选择 查看详细信息。
-
然后选择 配置 选项卡并单击 添加配置 按钮。
-
在 环境配置 对话框中,输入以下详细信息:
- 名称:输入环境变量的名称。 它必须匹配
cdn.yaml
文件中的purgeKey1
或purgeKey2
值。 - 值:输入清除API令牌值。
- 已应用 服务:选择 全部 选项。
- 类型:选择 密钥 选项。
- 单击 添加 按钮。
- 名称:输入环境变量的名称。 它必须匹配
-
重复上述步骤为
purgeKey2
值创建第二个环境变量。 -
单击 保存 以保存并应用更改。
部署CDN规则
最后,使用Cloud Manager管道将配置的CDN规则部署到AEM as a Cloud Service环境。
-
在Cloud Manager中,导航到 管道 部分。
-
创建新管道或选择仅部署 Config 文件的现有管道。 有关详细步骤,请参阅创建配置管道。
-
单击 运行 按钮以部署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>
:指定清除操作类型的自定义标头。 该值可以是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
清除类型时,请务必小心,因为它会增加到源服务器的流量。清除特定资源的缓存
在此示例中,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
。