1.
核心思路:为什么要用混合缓存策略
- 混合缓存把缓存责任分层:浏览器、CDN、源站三级互补。
- 通过不同TTL与协商缓存(ETag/Last-Modified)减少源站请求。
- 对免费国内CDN来说,命中率直接决定稳定性与费用节省。
- 在峰值流量或DDoS情况下,边缘优先策略能减少源站压力。
- 目标是把静态内容100%交给边缘,动态内容做可缓存化与分片缓存。
2.
策略要点:具体做法与头部设置
- 静态资源设置Cache-Control: public, max-age=31536000, immutable,优先交给CDN长期缓存。
- 对常变但可短期缓存的接口返回Cache-Control: s-maxage=60, stale-while-revalidate=30。
- 使用ETag/Last-Modified做协商缓存,减少304带宽。
- CDN层采用基于路径的缓存规则,避免对登录/购物车类路径缓存。
- 对于个性化内容采用Cache-Key排除Cookie或通过Vary精确控制。
3.
技术实现:Nginx + Free CDN 的典型配置示3示例
- 源站推荐配置gzip、brotli压缩并开启http2以减少延迟。
- nginx 使用 proxy_cache 配置作为本地二级缓存,降低后端压力。
- 示例:在源站启用 proxy_cache_path 与 fastcgi_cache(见下方示例配置)。
- 设置缓存键:$scheme$host$request_uri 去除动态参数或用map规范化。
- 定期通过API或PURGE机制主动清理CDN缓存以配合发布流程。
# 源站 nginx 缓存片段(示例)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cdn_cache:100m max_size=10g inactive=60m;
server {
location /static/ {
proxy_cache cdn_cache;
proxy_cache_valid 200 302 30d;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
}
4.
真实案例:博客站点通过免费国内CDN优化后的效果
- 背景:某技术博客,日活20k,峰值QPS约150,原VPS配置为2 vCPU/4GB,带宽100Mbps。
- 初始(未用CDN):月下行流量约300GB,源CPU占用高峰80%。
- 采用混合策略(浏览器缓存+免费CDN缓存+源站nginx本地缓存):
- 结果:CDN缓存命中率提升到85%,源站下行降至约45GB/月,CPU高峰降至30%。
- 说明:该站通过设置静态资源一年缓存、接口短缓存与stale-while-revalidate实现了流量与稳定性双赢。
5.
数据对比:优化前后关键指标
- 下表展示优化前后关键指标对比(示例数据)。
| 指标 | 优化前 | 优化后 |
| 月下行流量 | 300GB | 45GB |
| CDN命中率 | 0% | 85% |
| 源站CPU高峰 | 80% | 30% |
| 平均响应延迟 | 220ms | 80ms |
| DDoS 暴露风险 | 高 | 中低 |
6.
DDoS 与稳定性对策:如何配合免费CDN提升抗压
- 利用CDN作为第一道防线,缓存静态内容并屏蔽大量恶意请求。
- 在源站配置iptables + fail2ban 限制异常连接与速率。示例:connlimit、limit_conn。
- 对API实行滑动窗口限流、验证码或行为验证降低自动化攻击影响。
- 使用CDN的防火墙规则(IP黑名单、地理封禁)和请求速率限制功能。
- 在流量异常时启用“源站保护模式”:将CDN回源频率降至最低,使用缓存的stale内容继续响应。
7.
落地建议与成本效益
- 优先缓存大文件与图片,使用WebP/压缩可以进一步节省带宽。
- 对免费CDN设置合理的缓存层级与回源策略避免频繁回源计费或封限。
- 定期监控CDN命中率与源站流量,目标命中率>=80%为良好基线。
- 在发布流程中加入CDN缓存刷新脚本,避免大量回源突发流量。
- 若流量持续增长,考虑混合多家免费/付费CDN并做流量分流以提高冗余与稳定性。
来源:如何通过混合缓存策略最大化免费国内cdn的价值与稳定性