1. 目的:提高静态资源(JS/CSS/图片/字体)被边缘节点命中率,降低回源、缩短响应时间。
• 成本与延迟:命中率低会导致频繁回源,增加带宽与延迟。
• 策略方向:规范 URL/查询参数、按类型设置 TTL、减少转发 header/cookie、版本化资源、监控与验证。
2. 操作步骤:先看清楚哪些 URL 最多被请求并且经常 MISS。
• 从 CDN 或 Web 服务器导出最近 7~30 天访问日志(Cloudflare/CloudFront/S3/NGINX)。
• 用工具统计 top URL、按路径、按 query-string、按 cookie 分组(示例命令:awk/grep + sort -n)。
• 目标项:找出带有无意义 query 参数、不同指纹但相同文件名、以及被转发了大量 header/cookie 的静态文件。
3. 操作步骤:源站直接下发可靠的 Cache-Control 与 ETag/Last-Modified。
• 长期可缓存的静态文件(带指纹哈希)示例:Cache-Control: public, max-age=31536000, immutable
• 可短期缓存或 HTML:Cache-Control: public, s-maxage=60, max-age=10, stale-while-revalidate=30
• Nginx 示例:add_header Cache-Control "public, max-age=31536000, immutable"; 然后重启 Nginx 并确认生效。
• 同时保持 ETag 或 Last-Modified 以支持条件请求(304)。
4. 操作步骤:减少因 query string 导致的 cache miss。
• 检查哪些 query 参数对资源内容有影响(例如 v=hash, ts= 时间戳)并将 v 放入白名单,忽略无关参数(utm_source 等)。
• 在 CloudFront:Behavior → Cache Based on Selected Request Parameters → 仅选择必要的 Query String。
• 在 Cloudflare:Page Rule 或 Transform Rules → 对静态路径选择 “Ignore Query String” 或使用正则标准化。
• 示例正则:将 /static/(.+)\?.* 的缓存键规范为 /static/$1。
5. 操作步骤:为不同类型设置不同 TTL,并在 CDN 中清除无意义头/cookie。
• 建议:哈希文件(js、css、woff2、png)最大 TTL = 1 年;图片可同样设置较长;HTML/JSON 设置较短并允许 stale-while-revalidate。
• 禁止转发 Cookie 与大多数自定义 Header 给静态路径(会破坏共享缓存)。在 CDN 行为中设置“不要转发 Cookie/Headers”。
• 检查响应 Header:curl -I https://yoursite/static/app.js 并确认 cf-cache-status/X-Cache/age/Cache-Control。
6. 操作步骤:使用文件名哈希并建立快速清除流程。
• 构建阶段把 hash 写进文件名(app.abcdef.js),发布即是原子替换,旧文件可以长期缓存。
• 清除示例:CloudFront → aws cloudfront create-invalidation --distribution-id DIST --paths "/static/*";Cloudflare API:curl -X POST "https://api.cloudflare.com/client/v4/zones/
• 建议建立自动化脚本并记录清除操作,避免滥用导致成本或延迟。
7. 问:如何在请求层面快速判断资源是否被 CDN 命中?
7. 答:使用 curl -I 并观察返回 header,如 cf-cache-status/ X-Cache/age。示例:curl -I https://example.com/static/app.js 如果看到 cf-cache-status: HIT 或 X-Cache: Hit from cloudfront,且有 Age 字段 >0,即为命中。若为 MISS/EXPIRED 则为回源。
8. 问:常见导致静态资源命中率低的主要原因有哪些?
8. 答:1) 无谓的 query-string 导致缓存分裂;2) 转发了 Cookie 或过多 Header;3) 未对哈希文件设置长 TTL;4) 缓存键包含用户特定信息(Host、Auth header)。排查后按上面步骤修复即可显著提升。
9. 问:完成规则调整后应如何验证与持续优化?
9. 答:1) 监控命中率(CDN 控制台/自建统计)与回源流量,目标命中率逐步上升到 90%+(视业务);2) 每次发布后检查 top-miss 列表并修正规则;3) 建议 1~2 周一次回顾策略并在 CI/CD 中加入缓存 header 校验与自动化 purge 流程。
