CDN 缓存命中率优化技巧:提升 CDN 加速效果的实战策略
缓存命中率直接影响 CDN 的加速效果和成本。命中率越高,回源请求越少,网站加载速度越快,CDN 费用越低。
一、理解缓存命中率
1.1 两个关键指标
- 字节命中率 (Byte Hit Ratio):CDN 直接响应的流量占比,通常应 > 85%
- 请求命中率 (Request Hit Ratio):CDN 直接处理的请求占比,通常应 > 90%
1.2 常见命中率参考
| 内容类型 | 理想命中率 | 说明 |
|---|---|---|
| 图片 | > 95% | 基本不变 |
| CSS/JS | > 95% | 版本更新时变化 |
| 字体文件 | > 99% | 几乎不变 |
| HTML 页面 | 50-80% | 取决于变化频率 |
| API 响应 | 0-50% | 取决于可缓存性 |
二、优化技巧
技巧 1:设置合理的缓存 TTL
不同资源类型设置不同的缓存时间:
# 图片 - 长时间缓存
location ~* \.(jpg|jpeg|png|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# CSS/JS - 带版本号
location ~* \.(css|js)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
# HTML - 短缓存
location ~* \.html$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
}
技巧 2:使用文件版本化
在文件名中加入哈希值或版本号,实现长期缓存 + 即时更新:
# ❌ 不推荐
style.css?v=1
# ✅ 推荐
style.a1b2c3d4.css
main.55e8c9f1.js
技巧 3:避免 URL 动态化
- 不要使用带随机参数的 URL
- 避免使用 Session ID 等动态参数
- 使用 CDN 的忽略查询参数功能
技巧 4:优化 Cookie 策略
Cookie 会导致 CDN 无法缓存响应:
# 静态资源清除 Cookie
location ~* \.(jpg|css|js)$ {
add_header Cache-Control "public";
add_header Set-Cookie "";
}
技巧 5:启用 CDN 预取
CDN 预取(Pre-fetch)在空闲时提前拉取热门内容:
CDN 预取策略:
1. 分析缓存 MISS 请求
2. 识别热门 MISS 内容
3. 主动拉取到边缘节点
4. 减少下次 MISS
技巧 6:分层缓存
使用 CDN 的中层缓存(Tiered Cache):
用户 → 边缘节点 (100ms TTL) → 中层节点 (1h TTL) → 源站
技巧 7:缓存 POST 请求
部分 CDN 支持缓存 POST 请求的响应(需要确认支持):
Cache-Control: public, max-age=3600
CDN-Cache: POST requests with same body
技巧 8:监控和分析
定期分析日志中的 HIT/MISS 分布,找到需要优化的问题资源。