直接给结论:CDN 不是套上就变快,命中率低等于把源站又当了一次公网出口——钱照付、慢照旧。先把源站缓存头和缓存规则理顺,命中率上去之后再谈加带宽、升配置,顺序反了就是白花钱。
一、先确认命中率是不是真的低
别用浏览器看,本地缓存会骗人。用 curl -v -o /dev/null "https://加速域名/static/logo.png" 看响应头:X-Cache: HIT 是命中,MISS 是这次回源了;Age 是已在节点上放了多少秒。再对着 CDN 控制台的命中率曲线看趋势,是全站低还是某类文件低。
二、命中率上不去,九成是这四个原因
- 源站下了”不许缓存”的指令。Nginx、PHP 或框架常吐出
Cache-Control: no-cache、max-age=0,CDN 默认尊重源站,于是每次都回源。让静态资源别带这些头,或在缓存配置里勾上”忽略源站不缓存标头”。 - 响应里带了 Set-Cookie。有 Set-Cookie 的响应 CDN 默认不缓存,命中率直接归零。根治是让源站只给接口发 Cookie;改不动源站,就在 CDN 入站响应头里按
/static/、*.css这类路径删掉它,别全局删,不然后台登录会集体掉线。 - URL 带可变参数。模板里常见的
?_t=1699999999、?version=会让同一张图被当成几百个资源。开启忽略参数能合并成一份缓存,但分页、图片处理、下载签名这类参数必须保留。 - 缓存规则配反了。最常见的是根目录
/统一设 0 秒且权重最高,等于全站不缓存。按后缀和目录分开设,并让具体目录的权重高于根目录。
另外两条常被忽略:视频、安装包要开 Range 回源,否则拖一次进度条就拉整个文件(源站需支持 206);访问量很低的站,冷门资源被节点按热度淘汰、反复回源属于正常现象,热门资源可提前预热。腾讯云 CDN 对应的是过滤参数、缓存过期配置与预热刷新,逻辑一致,只是叫法不同。
注意:
- 刷新缓存会清空节点存量,刷一次命中率掉一次,别当日常运维手段;静态资源改版尽量用文件名带哈希的方式发布。
- 登录态、购物车、订单页千万别长缓存,缓存住就是数据串号事故;反过来也别全站 0 秒,那和不接 CDN 没差别。
- 规则改完要几分钟才下发全网,且只对新请求生效。先在测试域名上验证 X-Cache,再动生产。
| 资源类型 | 建议缓存时间 | 说明 |
|---|---|---|
| 图片 / 字体 / 视频 / 安装包 | 30 天以上 | 文件名不变时靠刷新或改版本号更新 |
| CSS / JS / HTML 页面 | JS、CSS 1~30 天,HTML 5 分钟~1 小时 | 文件名带哈希的可以放更长 |
| /api/、登录页、订单页 | 0 秒(不缓存) | 动态内容缓存住就是事故 |
上表为常见配置参考,具体以阿里云 CDN 官方文档与控制台实际说明为准;涉及费用请以官方活动页实时价格为准。
总结:命中率 60% 意味着仍有四成请求穿透到源站,回源流量另计费,源站带宽也没省下来。先把缓存头和缓存规则弄对,再看带宽够不够——顺序对了,同样的钱能多扛几倍流量。
阿里云ECS服务器产品文档:参考-阿里云服务器ECS文档
腾讯云轻量服务器产品文档:参考-轻量应用服务器 文档中心
