CDN加速配置终极指南:让网站访问速度提升3倍的实战经验
CDN到底解决了什么问题
去年给一个广州的电商客户做优化,服务器在阿里云北京机房,广东用户打开首页要2.8秒。纯靠服务器侧优化已经到天花板了,加上CDN之后,广东用户首屏时间降到0.9秒,转化率直接涨了22%。
CDN的核心是把静态资源缓存到离用户最近的节点。用户请求资源时,DNS智能解析到最近的边缘节点,直接从节点返回缓存,不用每次都回源。这一步省掉的不是几十毫秒,是跨地区网络传输的几百毫秒。
怎么选CDN服务商
市面上的CDN服务商一大堆,先给个对比:
| 服务商 | 国内节点数 | 海外覆盖 | 计费方式 | 适合场景 |
|---|---|---|---|---|
| 阿里云CDN | 2800+ | 一般 | 流量/带宽 | 国内业务为主 |
| 腾讯云CDN | 2500+ | 较好 | 流量/带宽 | 游戏、视频 |
| Cloudflare | 国内有限 | 300+城市 | 流量包 | 海外业务 |
| 又拍云 | 600+ | 一般 | 流量包 | 中小站点 |
国内业务推荐阿里云或者腾讯云,节点多价格透明。海外业务Cloudflare是首选,免费版就够中小站点用,Pro版20美元一个月带WAF防护。
域名拆分与CNAME配置
CDN配置的第一步是把静态资源拆到独立子域名,比如 cdn.example.com。混在主域名下没法精细控制缓存策略,还会被cookie污染,每次请求都带上几KB的cookie纯属浪费。
DNS侧添加CNAME记录,把 cdn.example.com 指向CDN服务商提供的加速域名:
cdn.example.com CNAME example.com.cdn.dnsv1.com
CDN控制台回源地址填源站IP或者域名,回源协议跟着源站走,源站HTTPS就选HTTPS回源。
缓存策略是性能命脉
CDN配完不等于万事大吉,缓存规则配错的话等于花钱买了个反向代理。核心原则:HTML文件不缓存或者短缓存,静态资源长缓存。
Nginx源站侧的响应头这样配:
# HTML文件不缓存
location ~ \.html$ {
add_header Cache-Control "no-cache, must-revalidate";
}
# 静态资源长缓存1年
location ~* \.(js|css|png|jpg|jpeg|gif|webp|svg|woff2)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
immutable 这个参数很多人不知道,它告诉浏览器这个资源永远不会变,连304验证请求都省了。前提是文件名带hash,发布新版本时hash变了URL也变了,老缓存自然失效。
CDN控制台的缓存规则
CDN服务商控制台还要配一套缓存规则,覆盖源站的响应头。规则优先级从上到下,第一条匹配上就用第一条:
.html$缓存0秒,每次回源.php$缓存0秒.*\.(js|css|png|jpg|webp)$缓存30天/api/*不缓存
API接口千万别缓存,我见过一个客户把登录接口缓存了30天,所有用户登录后看到的都是同一个账号信息,差点酿成安全事故。
预热与刷新
上线新版本时,静态资源URL变了,CDN节点上还是老URL的缓存。需要主动预热,让CDN提前把新资源拉到节点上。
阿里云CDN的预热API调用示例:
curl -X POST https://cdn.aliyuncs.com \
--data-urlencode "Action=PushObjectCache" \
--data-urlencode "ObjectPath=https://cdn.example.com/js/app.v2.0.js" \
--data-urlencode "AccessKeyId=YOUR_KEY"
刷新是反向操作,把节点上的缓存清掉,强制下次请求回源。改完CSS紧急修复bug时用。刷新分URL刷新和目录刷新,目录刷新影响范围大,慎用。
HTTPS与CDN的配合
CDN节点也要配HTTPS证书,否则用户访问CDN域名时浏览器报红。主流服务商都支持免费上传证书或者一键申请Let’s Encrypt。
回源协议选HTTPS回源,但要注意CDN到源站的SSL握手会消耗时间,开启会话复用能减少70%的握手开销。回源超时设长一点,默认3秒在某些场景不够。
跨域配置
静态资源拆到子域名后,字体文件和fetch请求会触发CORS。Nginx源站加响应头:
location ~* \.(woff2|ttf|otf|eot)$ {
add_header Access-Control-Allow-Origin "https://example.com";
add_header Access-Control-Allow-Methods "GET";
}
别用 Access-Control-Allow-Origin: *,存在安全隐患。明确指定允许的域名。
监控与调优
CDN控制台的监控数据要看,重点几个指标:
- 缓存命中率:低于80%就要查缓存规则
- 回源带宽:突然飙升说明缓存失效
- 状态码分布:4xx占比高检查URL
某次客户CDN命中率从92%掉到45%,排查发现是改版后图片文件名没加hash,每次更新都触发回源。改成hash命名后命中率回到95%,月账单降了三分之一。
性能数据对比
| 指标 | 无CDN | 配置CDN后 |
|---|---|---|
| 广东首屏 | 2.8s | 0.9s |
| 北京首屏 | 1.2s | 0.6s |
| 月流量费 | 800元 | 350元 |
| 缓存命中率 | 0% | 94% |
CDN流量费比源站带宽便宜,命中率上去之后总成本反而降了。
避坑清单
- 不要把动态接口走CDN缓存,会出大事
- 缓存规则改完别忘点”刷新预热”,等自然过期会等死人
- CDN证书过期了源站证书没过期,监控只看源站会漏
- 海外节点流量计费贵,没海外业务就关掉海外节点
- 测速别只测自己办公室,用17ce或者博纳云多点测速
- 回源鉴权必须开启,防止源站IP泄露被直接访问