1.
概述:静态与动态内容的本质差异
静态内容(图片、CSS、JS、视频)可长时间缓存;动态内容(API 响应、用户个性化页)需实时或短时缓存。小分段:a) 静态着重边缘缓存与压缩;b) 动态注重回源性能、连接复用与智能路由;c) 先分类再设计缓存策略。
2.
选择海外 CDN 节点与 Anycast/DNS 方案
步骤:a) 测试候选 CDN 提供商的 PoP 覆盖(使用 mtr/traceroute/edge-locations 列表);b) 检查 Anycast IP 与 DNS 全球解析延迟;c) 对比带宽峰值与计费模式。实操命令:traceroute -w 1 -q 1 example.com;mtr -r -c 100 -w example.com。
3.
配置 TLS 与证书策略(保证全球握手速度)
步骤:a) 使用 TLS 1.3 与 ECDSA 证书,减少握手时间;b) 在 CDN 控制台启用 OCSP Stapling、TLS Session Resumption;c) 配置最小的证书链深度。验证命令:openssl s_client -connect cdn.example.com:443 -tls1_3。
4.
为静态内容设置缓存头(Cache-Control 实践)
步骤与示例:a) 对版本化资源(含哈希)设置 Cache-Control: public, max-age=31536000, immutable;b) 对可能更新的资源设置 max-age=3600, s-maxage=86400;c) 使用 ETag 与 Last-Modified 做增量回源。Nginx 示例:add_header Cache-Control "public, max-age=31536000, immutable";
5.
为动态内容设计智能缓存规则
操作细则:a) 区分可缓存的 API(列表、公共数据)与不可缓存的(用户专属、敏感数据);b) 使用短 TTL(比如 s-maxage=60)并配合 stale-while-revalidate;c) 在 CDN 控制台创建路径匹配规则(/api/public/* 缓存,/api/user/* 不缓存)。
6.
缓存键(Cache Key)与 Query String 策略
实操步骤:a) 仅在必要时加入 query string 到 cache key;b) 常见策略:忽略跟踪参数(utm_*)、排序参数;c) 在 CDN 中配置自定义 cache key(Host + Path + Selected Headers)。Cloudflare/CloudFront 可设置“忽略查询字符串”或“Whitelist 参数”。
7.
Cookie 与 Authorization 头的处理
具体做法:a) 对静态资源移除 Set-Cookie;b) 对动态需鉴权接口使用 Authorization 直达回源或用短 TTL 缓存并设置 vary: Authorization;c) 在 CDN 规则中排除敏感头部参与缓存键以避免泄露。
8.
回源优化:长连接、压缩与 HTTP/2、QUIC
执行步骤:a) 在源站启用 keepalive 和 connection pooling(Nginx:keepalive_timeout, keepalive_requests);b) 开启 gzip/brotli 压缩,静态使用 brotli;c) 在 CDN 与源间优先使用 HTTP/2 或 HTTP/3(QUIC)以减少 RTT。
9.
边缘计算与动态加速(Edge Functions / Lambda@Edge)
实操指南:a) 将轻量化业务逻辑移到边缘(A/B 测试、重写、鉴权缓存)以减少回源;b) 示例:Cloudflare Workers 进行 auth token 检查并缓存公开数据;c) 控制成本:把高计算量放回源,边缘用于快速决策。
10.
缓存预热(Cache Warming)与失效(Purge)策略
步骤:a) 部署新版本后用脚本并行请求常用 URL(使用 ab 或 hey)进行预热;b) 使用 CDN 的批量清除 API:调用 purge endpoint 传入路径或 tag;c) 对频繁更新内容使用按标签失效,避免全域清除。示例 curl:curl -X POST "https://api.cdn.com/purge" -H "Authorization: Bearer XXX" -d '{"paths":["/app/*"]}'
11.
监控、日志与性能测试
实操列表:a) 在 CDN 打开边缘日志(边缘响应时间、命中率);b) 使用合成测试(WebPageTest、Lighthouse)和真实用户监控(RUM);c) 关注关键指标:缓存命中率、TTFB、95% 响应时间、回源流量。
12.
故障与回滚流程设计
步骤:a) 设置健康检查与自动回源路由;b) 部署前进行灰度发布与 Canary 测试;c) 编写回滚脚本:撤回 CDN 配置、恢复旧版本源站、清理新规则。
13.
跨区域与法律合规注意项
实践要点:a) 检查目的地国家的隐私/数据驻留要求;b) 对用户数据路径做审计,避免将敏感数据缓存到不合规 PoP;c) 在 CDN 规则中禁用日志或敏感头部记录。
14.
成本控制与计费优化
可执行步骤:a) 将大文件(视频)托管到专门的对象存储并使用 CDN 直连以降低回源带宽;b) 利用智能压缩与分片传输减少流量;c) 采用分层缓存与 Geo-based routing 来降低不必要的回源。
15.
实战检查清单(上线前逐项验证)
清单项:a) 验证 Cache-Control 与 Expires;b) 验证缓存命中(curl -I 查看 x-cache header);c) 测试回源链路、TLS、快速回滚脚本、边缘函数权限与日志可用性。示例命令:curl -I https://cdn.example.com/app.js 查看 x-cache, age。
16.
问:如何判断某个 API 适合放在 CDN 缓存而不是直连回源?
答:判断步骤:a) 检查数据是否用户特定或包含敏感信息;b) 评估数据变化频率(高频变动不宜长期缓存);c) 如果为公共数据且允许短时过期,可设置短 TTL + stale-while-revalidate,并在 CDN 进行试运行观察命中率与正确性。
17.
问:在配置 cache key 时,我应该包含哪些 header/参数以避免缓存污染?
答:最佳实践:a) 只把必要的 header 加入 cache key(如 Accept-Language、Device-Type),避免加入 Cookie、Authorization 除非必要;b) 对 query string 做白名单,仅保留确实影响内容的参数;c) 在测试环境用一组示例请求验证没有缓存交叉污染。
18.
问:怎样用命令快速验证 CDN 的缓存命中与回源行为?
答:实操命令:a) 第一次请求:curl -I -H "Cache-Control: max-age=0" https://cdn.example.com/resource 看 x-cache: MISS;b) 再次请求应为 HIT:curl -I https://cdn.example.com/resource 看 x-cache: HIT 与 age 值;c) 若需验证回源,短时间内改动源内容并再次请求,观察是否触发回源(x-cache: MISS 或 504/502),并结合 CDN 日志确认回源时间戳。