1. 评估前提与目标
- 明确目标:降低用户感知延迟、减少源站带宽、提高可用性。
- 确定用户分布:通过GA/Google Analytics、CDN日志或IP库统计访问量的地域分布(例如美国东/西/中部、欧洲、亚太)。
- 输出一张简单表:主要流量国家/州、峰值时间、静态/动态资源比例、SSL要求(HTTPS)。
2. 选择CDN提供商与边缘覆盖策略
- 对比要点:PoP(边缘节点)数量与分布、在北美(尤其美国东/西岸与内陆)的PoP密度、回源性能(到美国源站的中转线路)、价格与缓存/请求计费规则。
- 实际行动:访问厂商PoP地图(Cloudflare、AWS CloudFront、Fastly、Akamai、Gcore等),标记与用户密度匹配的PoP集。
- 建议:若主要用户在美洲,优先选择在美洲PoP密集且有良好骨干互联的厂商;若有全球用户,选全球覆盖好的厂商并开启区域前端策略。
3. 用数据验证边缘节点选择(操作步骤)
- 步骤1:用现网日志或GA抽样,生成10个经常访问的客户端IP/城市。
- 步骤2:使用在线测试工具(webpagetest.org、GTmetrix、CDNPerf)从多个城市分别测试目标域名,记录首字节时间(TTFB)与连接路径。
- 步骤3:使用命令行:dig +short CNAME yoursite.example(看是否解析到CDN厂商域名);curl -I https://yoursite -v 查看X-Cache或CF-Cache-Status头。
- 步骤4:对比不同CDN厂商测试结果,选择在目标城市延迟最低且命中率最高的候选。
4. 设计缓存规则总体思路
- 分类资源:静态(图片、JS、CSS、视频)、可缓存API(列表、公共接口)、动态私有(用户仪表盘、购物车)。
- 基本原则:静态资源尽量“Cache Everything”;动态资源按需缓存并使用短TTL或Stale策略;对登录/购物车等按Cookie或路径绕开缓存。
- 缓存键决定命中率:默认缓存键一般包含主机名+路径+查询字符串,可根据业务决定是否忽略部分query参数。
5. 在CloudFront上具体配置示例
- 步骤1:创建Distribution → Origin Domain Name 填写你的美国源站域名或ELB地址。
- 步骤2:Origin设置:Enable Origin Shield(如果有高并发,选择靠近源站的Origin Shield PoP)。
- 步骤3:Cache Behavior:Path Pattern(/static/*)→ Viewer Protocol Policy = Redirect HTTP to HTTPS;Allowed HTTP Methods = GET, HEAD(如需API缓存加POST需特殊处理)。
- 步骤4:Cache Policy & Origin Request Policy:选择Managed-CachingOptimized并自定义Cache Key(是否包含Query Strings、Cookies、Headers)。设置Default TTL/Max TTL/Min TTL,例如静态max-age=7天(604800s)。
- 步骤5:部署并观察CloudFront的X-Cache头(MISS/HIT/REVALIDATED)。
6. 在Cloudflare上具体配置示例
- 步骤1:DNS托管并开启Proxy(橙云)。
- 步骤2:Page Rules或新Cache Rules:对/static/*设置 “Cache Level: Cache Everything”、Edge Cache TTL = a month,Browser Cache TTL按业务设定。
- 步骤3:Workers用于复杂缓存逻辑(按请求头或URL参数自定义缓存键)。
- 步骤4:在Rules中设置 “Bypass Cache on Cookie” 对登录态Cookie绕过缓存。
- 步骤5:使用Analytics面板检查缓存命中率、请求分布与请求来源国家。
7. 源站(nginx)如何设置缓存相关响应头
- 示例配置(nginx):在静态location里加入:add_header Cache-Control "public, max-age=604800, s-maxage=604800, stale-while-revalidate=3600";
- 对API可使用:add_header Cache-Control "private, max-age=60, s-maxage=0";(私有内容不被中间CDN缓存)。
- 确保Origin返回正确的Vary头(若根据User-Agent或Accept-Encoding缓存,设置Vary: Accept-Encoding)。
8. 缓存键、Query String与Cookie的实操建议
- Query String:列出影响资源的参数白名单(如 ?v= 版本号)并只在缓存键中包含这些参数,其他忽略以提高命中率。
- Cookie:登录类Cookie应导致绕过或拆分缓存(设置Cache Rule bypass when cookie present);对统计Cookie可选择忽略。
- Header:只转发必要请求头(Authorization只转发到源站,不纳入缓存键)。
9. 失效(Purge)与回源雪崩防护
- 失效策略:按URL精确清理优先,支持标签(tag)-based清理的厂商更方便(如Fastly标签)。
- API自动化:使用厂商的Purge API(示例curl):curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone}/purge_cache" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" --data '{"files":["https://example.com/path/file.js"]}'.
- 回源雪崩:使用stale-while-revalidate、stale-if-error、Origin Shield或Rate Limit保护,防止同时大量MISS回源。
10. 测试与监控实施步骤
- 线上验证:使用curl检查响应头:curl -I https://yoursite/path -H "Host: yourdomain",查看CF-Cache-Status / X-Cache。
- 分地域监测:用webpagetest或自建VPS(不同区域)做批量测试,记录TTCB、TTFB与完整加载时间。
- 监控项:缓存命中率、回源请求数、带宽、错误率(5xx)、源站CPU负载,配置告警阈值并定期检查。
11. 当源站在美国时的特殊考量
- 优先在美洲(尤其用户密集的城市)选择PoP;如果用户在全球,确保在关键海外区域也有足够PoP。
- 若源站在美西但大量东海岸用户,检查是否存在“长尾回源”现象,考虑在中部/东部部署Origin Shield或在源站前放置缓存层(Redis、squid等)。
- 合理设置TTL:对于跨洲请求可设稍长TTL以降低跨洋回源频率。
12. 性能与安全(TLS/HTTP2/接入策略)
- 启用HTTP/2或HTTP/3(QUIC)以减少连接延迟并改善跨洲性能。
- TLS:使用CDN托管证书或上传自己的证书,确保证书覆盖域名与子域。
- 安全设置:WAF规则、速率限制、Bot管理与Geo-block(若需要屏蔽高风险国家)。
13. 问:当源站在美国,但部分用户在亚太,应该如何配置边缘节点?
- 答:优先选有全球PoP的CDN厂商并开启就近接入;为亚太用户检查厂商在该区域的PoP覆盖并测试实际延迟;若跨洋延迟仍高,可考虑在亚太部署额外边缘缓存或使用多源策略(GeoRouting到就近源)。
14. 问:如何设置缓存策略以兼顾更新速度与命中率?
- 答:对静态资源设置长TTL并通过版本号(query或文件名)控制更新;对易变资源使用短TTL并配合 stale-while-revalidate;使用标签式或路径精确purge实现快速失效。
15. 问:如何验证CDN是否真正降低了对美国源站的回源流量?
- 答:对比开启CDN前后的源站访问日志与带宽峰值(按时间段),检查回源请求数(CDN控制台也有回源数据);用curl观察CDN返回的X-Cache头,长期监控缓存命中率并设置报警。
来源:CDN加速策略当本服务器网站在美国 时如何选择最佳边缘节点和缓存规则