[干货教程] Cloudflare 静态 CDN 站点缓存配置:新手也能看懂的优化指南
先上效果图(Cloudflare Free Plan,正常CDN解析开小黄云,无优选;服务器在罗马尼亚)
Tip: 适用于内容几乎不会修改的静态图像CDN站
- 前往 dash.cloudflare.com ,选择你要配置的域
- 侧边栏找到“缓存--缓存规则”
(大概是这么个地方) - 创建新配置
(匹配表达式大概是这样的,按需修改,不能照抄)
(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错误状态码)
浏览器 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格式,可以极大减少空间占用