[干货教程] Cloudflare 静态 CDN 站点缓存配置:新手也能看懂的优化指南

先上效果图(Cloudflare Free Plan,正常CDN解析开小黄云,无优选;服务器在罗马尼亚)
image

Tip: 适用于内容几乎不会修改的静态图像CDN站

  1. 前往 dash.cloudflare.com ,选择你要配置的域
  2. 侧边栏找到“缓存--缓存规则”
    image
    (大概是这么个地方)
  3. 创建新配置
    image
    (匹配表达式大概是这样的,按需修改,不能照抄)

(http.host eq "timg-cdn.your-domain.com" and http.request.uri.path.extension in {"webp" "jpg" "png" "jpeg" "avif" "mp3" "mp4" "gif" "wav" "mov" "flv" "avi"})

缓存资格:符合缓存条件

边缘 TTL:
忽略缓存控制标头,使用此 TTL:2h
状态代码 TTL:单一状态码-200-持续时间1年

解释:你的静态资源在cf的节点上缓存多久,这里我们动了一点小脑筋,只有在HTTP 200(源服务器正常响应)时才缓存一年,其他响应(大概率是故障)只缓存2h(防止404 cc攻击/长期缓存5xx错误状态码)

image

浏览器 TTL:
替代源服务器,使用此 TTL:7d

解释:你的静态资源在用户的浏览器上缓存多久,7天是一个比较合适的值。太短用户每次访问都会重新从CDN加载图像,太长则有概率长期缓存错误状态码

缓存密钥:

  • 缓存欺骗盔甲 - 防止 Web 缓存欺骗攻击,同时允许缓存静态资产:✔️

(建议开启,虽然大概率用不到)

  • 按设备类型缓存 - 根据访问者的设备类型,分隔缓存的内容:

(用不到不用管)

  • 忽略查询字符串 - 无论查询字符串为何,均向所有人交付相同资源:✔️

(我们只是静态CDN站点,无需按照版本交付资源,也避免了查询字符 cc攻击)

  • 对查询字符串排序 - 以相同方式处理具有相同查询参数的请求,无论这些查询参数的顺序如何:

重新验证时提供过时内容、接受强 ETag、源服务器错误页面通过:保持默认选项(❌)


另一些不太专业的解释:

cc攻击套了cf CDN的静态资源服务器,其目的是利用CDN的各种特性让每一次请求都被转发到源服务器,而不是cf的cdn节点上(也称为某种意义上的确“cf穿盾”),常见的方法有:

  • 利用无意义的查询字符(/img.jpg?123):绕过CDN缓存,强制CDN节点从源服务器拉取新内容
  • 404攻击:访问一个随机的路径或不存在的文件,因为这个文件根本不存在所以CDN节点没有对应缓存,CDN节点被迫尝试从源服务器拉取

如果是图像资源,建议在服务器上用php或者配置cron任务转换为webp格式,可以极大减少空间占用

THE END