1.
缓存策略总体设计
- 明确静态/动态分离:静态资源(图片、JS、CSS、字体)走长TTL,动态走短TTL或不缓存。
- 设计分层缓存:边缘缓存 + 源站缓存(Origin Cache),边缘优先命中,源站作为回源。
2.
在小麦CDN控制台配置缓存规则
- 登录小麦CDN,进入域名 -> 缓存策略 -> 新建规则。
- 按路径匹配(/static/*, *.jpg, *.css)设置缓存类型为"强制缓存"并填写缓存时间(例如7天)。
3.
利用Cache-Control与Expires头精确控制
- 在源站设置Cache-Control响应头,如:Cache-Control: public, max-age=604800。
- 动态页面设置:Cache-Control: private, max-age=60 或 no-cache,并结合 must-revalidate 处理。
4.
缓存键(Cache Key)配置建议
- 默认包含协议+host+path;去除无关Query参数(如utm_*)。
- 在控制台设置缓存键白名单/黑名单:仅保留影响内容展示的参数,例如 ?id。
5.
处理Cookie与Authorization
- 静态资源不要携带Cookie,源站通过Set-Cookie时加路径/域限制并配合CDN忽略Cookie。
- 动态接口根据需要决定是否将 Authorization 包含到缓存键,避免敏感信息入缓存。
6.
Stale策略与预取策略
- 开启 stale-while-revalidate / stale-if-error,在边缘返回过期缓存同时异步回源刷新。
- 配置预热(预热URL列表或API)在发布后主动填充边缘缓存。
7.
压缩与变体缓存
- 在小麦CDN启用Gzip/Brotli压缩,确保源站不重复压缩。
- 对于不同Accept-Encoding、Accept-Language、User-Agent需使用变体缓存(Vary头)并在缓存键中选择性包含。
8.
回源连接与HTTP优化
- 源站启用Keep-Alive、HTTP/2或HTTP/3以减少回源延迟。
- 配置合理的最大连接数和超时(例如Keep-Alive 75s, timeout 30s),并使用连接池。
9.
回源负载与熔断策略
- 启用Origin Shield或回源节点池,减少源站并发回源次数。
- 配置熔断:连续N次回源失败后短期返回缓存或错误页面,避免雪崩。
10.
缓存更新与清理流程
- 使用小麦CDN的API或控制台批量清理/验证缓存(示例curl):
curl -X POST "https://api.xiaomai-cdn.com/purge" -d '{"urls":["https://a.com/static/app.js"]}' -H "Authorization: Bearer TOKEN"
- 上线流程:先预热->灰度->清理特定路径。
11.
监控与日志落地
- 打开CDN访问日志并导出到日志系统,监控命中率、回源率、回源响应时间。
- 设置告警:回源错误率、回源延迟超阈值、命中率下降。
12.
常见问题与排查步骤
- 命中率低:检查Cache-Control/Set-Cookie和缓存键是否导致分散;用curl -I 检查头部。
- 回源慢:使用traceroute/抓包确认回源链路、检查源站CPU/IO。
13.
问:如何快速发现哪些URL未被缓存?
使用curl查看响应头:curl -I https://域名/路径,关注X-Cache或X-Cache-Status(如MISS/EXPIRED)。同时在CDN控制台查看回源统计,筛选高回源率URL并逐一调整缓存规则。
14.
答:如何减少回源压力的具体操作?
策略:延长静态资源TTL、启用Origin Shield、批量预热常用URL、开启stale-while-revalidate。并在源站启用Keep-Alive与HTTP/2,配合连接池与负载均衡。
15.
问:发布新版本后如何保证无缝刷新缓存?
建议:对静态资源采用版本化文件名(hash),不依赖强制清理;必要时使用API按路径精确清理,并先预热CDN边缘以避免回源高峰。
来源:技术详解 小麦cdn加速 的缓存策略与回源优化建议集合