CDN 的工作原理
浏览器请求页面时,DNS 通常会将请求导向 CDN,而不是直接发送到网站的源站服务器。CDN 会选择可用的边缘服务器,通常会考虑网络位置、服务器健康状况和当前流量。
浏览器 → CDN 边缘节点 → 缓存响应
→ 缓存未命中时访问源站服务器
边缘节点会根据缓存键查找缓存响应。缓存键通常以 URL 为基础,有时也会包含特定标头、Cookie 或查询参数。缓存命中时,边缘节点会直接返回响应;缓存未命中时,则向源站请求内容,将内容发送给浏览器,并可能保存副本。Cache-Control、Expires 和 Vary 等标头可用于控制内容的缓存时长和缓存条件。
CDN 的作用
- **缩短交付路径:**附近的边缘服务器可以降低图片、脚本、样式表和视频的延迟。
- **减轻源站负担:**缓存响应可避免源站处理每个请求。
- **应对流量高峰:**CDN 可以将客户端流量分散到多个边缘服务器,并承接可缓存请求。源站能否得到保护仍取决于缓存策略和源站架构,因为缓存未命中和动态请求仍可能到达源站。
- **执行请求控制:**许多 CDN 提供 DDoS 过滤、Web 应用防火墙和限速。
动态或个性化响应通常会转发到源站,但 CDN 仍可优化路由和连接。
CDN 与反向代理的区别
CDN 通常会在分布于不同地区的边缘节点使用反向代理,但两者并不等同。反向代理是处理流量的组件,CDN 则是分布式内容交付系统。
| 对比项 | CDN | 反向代理 |
|---|---|---|
| 部署方式 | 分布于多地的边缘节点 | 单点或分布式部署 |
| 主要用途 | 跨地区交付内容 | 管理入站流量 |
| 缓存 | 通常是核心功能 | 可选功能 |
CDN 如何影响代理流量
CDN 看到的是代理的出口 IP,而不是直接连接时使用的 IP。CDN 可能根据 IP 地理定位选择边缘节点或提供特定地区的内容。因此,两个代理访问同一个 URL 时,可能会连接到不同的边缘缓存,或收到不同的本地化页面。
403 响应或 429 响应可能来自 CDN 或其防火墙。502 或 504 则可能表示边缘节点未能及时从源站获得有效响应。采集公开数据时,应遵守网站条款和 robots.txt,降低请求频率,并按 Retry-After 的要求操作,不要通过轮换 IP 规避控制措施。
常见问题
CDN 和反向代理一样吗?
不一样。CDN 通常会在分布于不同地区的边缘节点使用反向代理,但两者并不等同。反向代理是处理流量的组件,CDN 则是分布式内容交付系统。
代理能绕过 CDN 缓存吗?
不能,至少无法可靠绕过。更换代理 IP 可能会将请求导向另一个边缘节点,但是否返回缓存内容或联系源站,仍由网站的 CDN 规则决定。
CDN 为什么会返回 403 或 429?
403 表示 CDN、其防火墙或网站拒绝了请求。429 表示触发了限速,此时应降低请求频率,并遵循 Retry-After 标头的要求。