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 分布,找到需要优化的问题资源。