使用 Cloudflare 的源站缓存控制

Cloudflare 默认不缓存 HTML 页面,必须通过添加页面规则(Page Rule)来开启网页缓存。然而,免费用户每个站点最多只能添加三条规则。对于一个复杂的项目来说,三条规则是远远不够用的。通过设置源站缓存控制(Origin Cache Control),可以仅使用一条规则来启用全站缓存。

启用 Cloudflare 全站缓存

进入 Cloudflare 站点管理后台,进入「规则 > 页面规则」页,点击「创建页面规则」按钮。创建如下规则:

创建页面规则

点击「保存并部署」按钮使规则生效。

使用源站缓存控制

源站服务器响应头部添加 Cache-Control 字段即可启用源站缓存控制。返回下列头部表示页面缓存一小时:

Cache-Control: public, max-age=3600

若返回下列头部之一则表示页面不得被缓存:

Cache-Control: no-store
Cache-Control: private
Cache-Control: max-age=0

此外,当源站响应头部包含 Set-Cookie 时,页面也不会被缓存。

检查缓存是否生效

使用浏览器访问网站——如果响应头部返回 cf-cache-status: HIT,则表示缓存生效,且命中缓存;如果响应头部返回 cf-cache-status: DYNAMIC,则表示源站缓存控制未生效,请检查配置是否正确;如果响应头部返回 cf-cache-status: BYPASS,则表示请求回源,页面未被缓存。

管理 Cloudflare 缓存

进入 Cloudflare 管理后台的「缓存 > 配置」页,点击「自定义清除」按钮,在弹出的对话框中输入要清除的 URL 地址列表。企业版用户另外还支持主机名、Cache-Tag 和前缀三种清理方式。

Cloudflare 还提供了 API 接口进行缓存管理。访问 API 接口需要用到 ZONE ID 和 API TOKEN 你可以在「概述」页右下角的「API > 区域 ID」栏中找到 ZONE ID,然后点击下方的「获取您的 API 令牌」,创建一个专门用于清理缓存操作的令牌。点击「创建令牌」按钮,选择「创建自定义令牌」,按如下配置创建:

创建自定义令牌

清除指定链接缓存的请求如下:

shellcurl --request POST \
  --url https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/purge_cache \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <API_TOKEN>' \
  --data '{
  "files": [
    "www.example.com",
    "images.example.com"
  ]
}'
替换命令中的 <ZONE_ID> 和 <API_TOKEN>