1.
请求发起与DNS解析
- 客户端发起URL请求(浏览器/移动端)。
- 操作步骤:在本地测试,先用dig或nslookup确认域名解析到CDN CNAME,例如:dig +short www.example.com。
- 优化点:将主域名CNAME到CDN提供的域名,启用DNS TTL合理设置(一般60-300s),使用托管DNS的Anycast以缩短解析时间。
2.
客户端建立连接(TCP/TLS)到边缘节点
- CDN边缘接收请求并完成TCP三次握手与TLS握手(如HTTPS)。
- 实操检查:使用curl测试并打印TLS信息:curl -vI https://www.example.com。
- 优化点:启用HTTP/2或HTTP/3以复用连接和减少延迟;部署OCSP stapling与TLS会话恢复(session resumption)。
3.
边缘节点解析请求并构建缓存键
- CDN根据配置生成缓存键(通常包含Host+Path+Query/IgnoreQuery/Headers/Cookies规则)。
- 操作指南:在CDN控制台查看或修改cache key规则,示例:忽略utm参数、保留重要的query如 ?id=。
- 优化点:尽量简化缓存键,去掉不影响页面内容的参数和无关cookie,提升命中率。
4.
边缘缓存查找(Cache Hit/Miss判定)
- CDN查找缓存:若命中(Hit)直接返回内容;若未命中(Miss/Expired)触发回源。
- 测试方法:使用curl查看响应头是否有CDN相关标识(X-Cache: HIT/MISS)或Age字段:curl -I https://www.example.com。
- 优化点:合理设置Cache-Control、Expires、ETag/Last-Modified,使用stale-while-revalidate等使用户在回源时仍能快速获得内容。
5.
回源策略决策
- 回源前CDN决定是否直接回源或通过Origin Shield/Region Pooling合并请求。
- 操作:在CDN面板启用Origin Shield或设置回源分组,减少对源站的并发请求。
- 优化点:启用Origin Shield、设置回源并发限制与排队策略,避免源站过载。
6.
回源请求构建与转发
- CDN向源站发起HTTP请求,包含必要头部(Host、If-Modified-Since、If-None-Match、X-Forwarded-For等)。
- 实操:在源站日志检查请求头,确认CDN IP段来源;或在源站设置白名单。
- 优化点:通过添加或剔除特定请求头减少回源差异,使用压缩传输(gzip/brotli)节省带宽。
7.
源站响应与缓存指令
- 源站返回状态码(200/304/5xx)并携带缓存指令(Cache-Control, Expires, Vary)。
- 建议配置举例(在Nginx origin): add_header Cache-Control "public, max-age=3600, stale-while-revalidate=300";
- 优化点:对静态资源(图片、JS、CSS)设置长TTL,对HTML使用短TTL或no-cache配合CDN边缘缓存策略。
8.
边缘接收回源并缓存/返回用户
- 边缘节点根据回源头决定缓存与否并将资源回传给客户端,同时更新缓存条目。
- 检查方法:再次使用curl确认返回头中的X-Cache变为HIT;在CDN监控看命中率。
- 优化点:使用分层缓存(Edge + Regional + Origin),对大文件启用分片与断点续传支持。
9.
缓存失效与刷新(Purge/Invalidate)
- 缓存失效可依TTL自动发生,也可通过API/控制台主动Purge(按URL或前缀)。
- 操作示例:curl -X POST "https://api.
cdn.com/purge" -H "Authorization: Bearer TOKEN" -d '{"url":"https://www.example.com/js/app.js"}'。
- 优化点:实现按需智能失效(例如通过CI/CD触发purge),避免大量同步失效导致回源风暴。
10.
日志、监控与排错
- 必备日志:边缘访问日志、回源日志、错误日志及指标(99th latency、origin latency、hit ratio)。
- 操作:在CDN启用日志推送到S3/OSS或ELK,设置Grafana/Prometheus报警。
- 排错技巧:遇到缓存问题检查Cache-Control、Vary、Set-Cookie、Query String规则与缓存键。
11.
性能与安全优化点清单
- 缓存:标准化URL、移除不必要的cookies、使用immutable标识。
- 安全:开启WAF、TLS强制、速率限制和IP黑白名单。
- 传输:启用HTTP/3、TCP Fast Open、压缩与图像格式转换(WebP/AVIF)。
12.
常见实操命令与配置片段
- 查看缓存头:curl -I -H "Cache-Control: max-age=0" https://www.example.com。
- Nginx示例(origin设置): location ~* \.(css|js|jpg)$ { add_header Cache-Control "public, max-age=31536000, immutable"; }
- Purge脚本:在部署脚本中调用CDN的Invalidate API,结合Git commit hash控制版本。
13.
问:如何判断是CDN缓存命中还是回源?
- 答:通过响应头通常能判断,如X-Cache: HIT/MISS或Age字段。用curl -I 查看头部,若有Age且X-Cache为HIT即为边缘命中;若返回X-Cache: MISS/EXPIRED则发生了回源。
14.
问:遇到回源压力大,第一步应做什么?
- 答:首先启用Origin Shield或启用CDN的回源合并功能,临时扩大源站资源或开启缓存更长TTL,必要时在CDN层返回错误页面与限制频率以保护源站。
15.
问:如何避免因为查询参数导致缓存命中率低?
- 答:在CDN配置中设置Query String规则,忽略无意义的tracking参数,仅保留影响内容的参数;或通过后端统一重写URL,确保同一资源使用同一缓存键。
来源:图解cdn的流程从请求到回源的每一步详尽说明与优化点