你有没有遇到过这种情况:辛辛苦苦做的网站,图片和脚本都优化了,可用户反映还是卡?尤其是一些内容经常更新的页面,明明改了,浏览器里还是老样子。这时候问题可能不在本地,而在CDN——特别是它的缓存策略没配对。
什么是CDN缓存动态配置
CDN(内容分发网络)不只是把文件搬到离用户近的服务器那么简单。静态资源比如JS、CSS、图片可以长期缓存,但像新闻页、商品详情、用户中心这类内容,每分钟都在变,如果也按老办法缓存几天,用户看到的就是过期信息。
动态配置就是根据不同页面或路径,设置不同的缓存规则。比如首页缓存10分钟,用户个人页不缓存,API接口强制绕过CDN直接回源。这样一来,既保证速度,又不牺牲实时性。
常见场景怎么配
举个例子,你搭了个博客站,用的是WordPress,托管在阿里云或者腾讯云的CDN上。你想让访客快速打开文章页,但又希望编辑完文章后能马上被看到。
这时候可以在CDN控制台设置:
- /wp-admin/* —— 不缓存,所有请求直连源站
- /api/* —— 缓存5秒,适合高频但短暂有效的数据
- /*.jpg,/*.png —— 缓存30天,带版本号或哈希名
- / —— 首页缓存3分钟,兼顾流量和更新频率
用规则匹配路径
以Cloudflare为例,你可以通过“页面规则”(Page Rules)实现精细控制。虽然它叫“静态”CDN,但配合规则完全可以做到动态行为。
Cache Level: Cache Everything
Edge TTL: 600 seconds
Browser TTL: 3600 seconds
Query String Handling: Ignore Query String
这条规则可以应用在 /^\/posts\/.*$/ 这样的正则路径上,只针对文章页生效。而用户中心 /user/profile 则单独设为“Bypass cache”,每次请求都回源验证。
利用HTTP头控制缓存
更灵活的方式是在源站输出时加上Cache-Control头。比如你的Node.js服务返回一个活动页:
res.writeHead(200, {
'Content-Type': 'text/html',
'Cache-Control': 'public, max-age=120' // 缓存2分钟
});
res.end(html);
CDN会自动读取这个头部,决定在边缘节点保留多久。如果你某个接口需要实时数据,就设成 no-cache 或 no-store:
'Cache-Control': 'no-cache, no-store, must-revalidate'
这样哪怕CDN节点再多,也不会缓存这份响应。
别忘了清除缓存的技巧
即使配置再精准,有时候也需要手动清空。比如发布重大更新,不能等缓存过期。大多数CDN平台提供“刷新缓存”功能,可以按URL或目录批量清理。
比如你改了网站LOGO,新图上传后,去控制台提交刷新请求:
https://yoursite.com/static/logo.png
几分钟内全球节点就会拉取最新版本。注意别滥用,频繁刷新会影响性能。
实际使用中,建议结合自动化脚本,在部署完成后自动触发刷新,省事又可靠。