阿里云ECS套了CDN网站还是慢,缓存命中率上不去到底卡在哪?

阿里云上云采购季 2核2G云服务器99元/年 续费同价

云服务器导航,点击直达:阿里云,腾讯云,京东云,百度云,UCloud

直接给结论:CDN 不是套上就变快,命中率低等于把源站又当了一次公网出口——钱照付、慢照旧。先把源站缓存头和缓存规则理顺,命中率上去之后再谈加带宽、升配置,顺序反了就是白花钱。

一、先确认命中率是不是真的低

别用浏览器看,本地缓存会骗人。用 curl -v -o /dev/null "https://加速域名/static/logo.png" 看响应头:X-Cache: HIT 是命中,MISS 是这次回源了;Age 是已在节点上放了多少秒。再对着 CDN 控制台的命中率曲线看趋势,是全站低还是某类文件低。

二、命中率上不去,九成是这四个原因

  1. 源站下了”不许缓存”的指令。Nginx、PHP 或框架常吐出 Cache-Control: no-cache、max-age=0,CDN 默认尊重源站,于是每次都回源。让静态资源别带这些头,或在缓存配置里勾上”忽略源站不缓存标头”。
  2. 响应里带了 Set-Cookie。有 Set-Cookie 的响应 CDN 默认不缓存,命中率直接归零。根治是让源站只给接口发 Cookie;改不动源站,就在 CDN 入站响应头里按 /static/、*.css 这类路径删掉它,别全局删,不然后台登录会集体掉线。
  3. URL 带可变参数。模板里常见的 ?_t=1699999999、?version= 会让同一张图被当成几百个资源。开启忽略参数能合并成一份缓存,但分页、图片处理、下载签名这类参数必须保留。
  4. 缓存规则配反了。最常见的是根目录 / 统一设 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文档
腾讯云轻量服务器产品文档:参考-轻量应用服务器 文档中心

发表评论