什么是 CDN
打开网站时,数据并不总是只从运营方的服务器送达。
图片、CSS、JavaScript、视频、字体、下载文件等,有时会通过称为 CDN 的机制分发。
CDN 是 Content Delivery Network 的缩写。
简单来说,它是把网站数据放在多个地点,并从靠近使用者或不容易拥塞的地点分发的机制。
理解 CDN 后就会知道,即使说“访问网站”,实际也可能涉及网站运营者的服务器、CDN、DNS、TLS 终止、日志、缓存等多个要素。
这在思考匿名性时也很重要。
因为 CDN 可能作为网站侧的一部分接收通信,并处理访问源 IP 地址、请求、、User-Agent、访问时刻等。
本文将整理 CDN 的基本、什么会变快、日志会留在哪里,以及匿名性中应该看什么。
什么是 CDN
CDN 是用于高效分发 Web 内容的网络。
网站原本的服务器有时称为源服务器。使用 CDN 的结构中,浏览器不一定每次都直接访问源服务器,而是可能经由 CDN 的服务器接收数据。
| 要素 | 作用 | 说明 |
|---|---|---|
| 使用者的浏览器 | 发送请求 | 请求页面、图片、CSS、JavaScript 等 |
| CDN | 中继分发 | 从靠近使用者的地点返回数据 |
| 源服务器 | 持有原始数据 | 网站运营者侧的原始服务器 |
| 缓存 | 临时保存 | 把常用数据保存在 CDN 侧 |
| DNS | 决定连接目标 | 有时会把访问导向 CDN 侧服务器 |
CDN 不只是“加速装置”。
在现代 Web 中,它可能承担分发、负载均衡、DDoS 防护、TLS 终止、WAF、图片优化、Bot 对策、日志分析等多个角色。
为什么使用 CDN
使用 CDN 的主要理由是速度、稳定性、负载分散和攻击防护。
如果使用者在日本,而源服务器在遥远的国家,每次都去远处的服务器取数据就会变慢。CDN 会把数据放在世界各地的多个节点,从靠近使用者的节点返回。
| 目的 | CDN 中发生的事 | 使用者看到的效果 |
|---|---|---|
| 加速 | 从近处节点返回 | 页面显示变快 |
| 负载分散 | 由多个节点处理 | 更能承受访问集中 |
| 缓存 | 保存相同图片或文件 | 减少源服务器负载 |
| DDoS 防护 | 在 CDN 侧承接攻击流量 | 网站更不容易宕机 |
| TLS 终止 | 在 CDN 侧处理 HTTPS 连接 | 证书管理和分发更高效 |
大型网站、新闻网站、视频网站、电商网站、SaaS、应用 API 中,使用 CDN 很常见。
从使用者看来,只是在普通地访问网站。
但是在背后,有时作出响应的不是源服务器,而是 CDN 的节点。
CDN 和缓存
CDN 的核心机制之一是缓存。
缓存是指把取得过一次的数据临时保存起来,以后返回保存数据的机制。
例如同一个 logo 图片、CSS、JavaScript、字体、公开图片等,会向许多使用者返回相同内容。这类数据比较容易保存在 CDN 侧。
| 数据 | 容易被缓存的程度 | 注意点 |
|---|---|---|
| 图片 | 高 | 旧图片可能暂时残留 |
| CSS | 高 | 更新反映可能出现时间差 |
| JavaScript | 高 | 版本管理很重要 |
| 视频 | 高 | 分发量大,因此 CDN 效果明显 |
| 登录后页面 | 低 | 需要谨慎处理个人化内容 |
| API 响应 | 取决于设计 | 含认证信息或个人信息时要注意 |
从匿名性和隐私的角度看,缓存很方便,但也有注意点。
旧图片或页面可能残留在 CDN 侧。即使网站侧删除了内容,在 CDN 缓存更新之前也可能仍然可见。
另外,如果网站设计出错,也存在把本来不该缓存的个人化数据保存到 CDN 的危险。
CDN 和 DNS
使用 CDN 的网站中,DNS 的结果可能指向 CDN 侧。
当使用者访问某个域名时,DNS 有时不会返回源服务器,而是返回用于前往 CDN 边缘服务器的信息。
边缘服务器是 CDN 侧在靠近使用者的位置接收请求的服务器。
| 阶段 | 发生的事 |
|---|---|
| 1 | 使用者访问域名 |
| 2 | DNS 返回 CDN 侧的连接目标 |
| 3 | 浏览器连接 CDN 的边缘服务器 |
| 4 | CDN 检查缓存 |
| 5 | 如果有缓存,CDN 返回数据 |
| 6 | 如果没有缓存,CDN 去源服务器取得数据 |
因此,即使是同一个域名,不同地区或不同网络也可能返回不同的 IP 地址。
这并不是异常。
在 CDN 和负载均衡中,连接目标会根据使用者位置、拥塞状况、故障状况而变化。
CDN 和 TLS 终止
HTTPS 通信会使用 TLS。
在使用 CDN 的结构中,从浏览器看,HTTPS 的连接目标有时会是 CDN。
这时,经过 TLS 加密的通信会在 CDN 处先被解密,CDN 处理请求。之后,CDN 再通过另一段通信转发到源服务器。
| 区间 | 通信 | 注意点 |
|---|---|---|
| 浏览器到 CDN | 受 HTTPS 保护 | 从使用者看,连接目标是 CDN 侧 |
| CDN 内部 | CDN 服务商的管理范围 | CDN 侧处理请求 |
| CDN 到源服务器 | 取决于配置,可能是 HTTPS | 网站运营者的设置很重要 |
| 源服务器 | 处理原始数据 | 有时看起来是来自 CDN 的连接 |
这不是说 HTTPS 没有意义。
HTTPS 会保护浏览器与连接目标之间的通信。不过,如果 CDN 成为 TLS 终止点,CDN 就处在处理通信的位置。
在匿名性中,需要把 CDN 也看作“网站侧包含的观察点”。
CDN 能看到什么
CDN 有时被放在网站的前段。
这种情况下,CDN 会接收来自使用者的请求。也就是说,CDN 可能处理连接源 IP 地址、访问时刻、User-Agent、请求目标、Cookie、HTTP 头等。
| 信息 | CDN 可能处理 | 匿名性上的意义 |
|---|---|---|
| 访问源 IP 地址 | 有 | 成为连接源网络的线索 |
| 访问时刻 | 有 | 成为与其他日志按时间照合的轴 |
| URL 路径 | 有 | 可以知道请求了哪个页面或 API |
| User-Agent | 有 | 成为浏览器和 OS 的线索 |
| Cookie | 取决于设计 | 与登录状态和标识符有关 |
| 通信量 | 有 | 可能看出文件发送或视频观看倾向 |
这并不表示 CDN 服务商一定会长期保存所有信息。
日志的保存范围、保存期间、访问权限、使用目的,会因 CDN 服务商和网站运营者的设置而变化。
重要的是,CDN 并不是通信路径上一团透明的空气。
CDN 是作为网站侧基础设施接收通信的存在。
Web 服务器看到的 IP 会改变
使用 CDN 后,源服务器看到的连接源 IP 地址可能会改变。
从源服务器看,直接连接来源不是使用者,而是 CDN 的 IP 地址。因此,网站侧可能通过 X-Forwarded-For、CF-Connecting-IP 这样的头,或通过 CDN 侧日志来处理原始客户端 IP。
| 观察位置 | 看到的 IP | 说明 |
|---|---|---|
| CDN | 使用者的访问源 IP | 直接接收来自使用者的请求 |
| 源服务器 | CDN 的 IP | 直接连接来源是 CDN |
| 应用 | 取决于设置 | 有时通过头处理原始 IP |
| 访问日志 | 取决于设计 | 可能同时留在 CDN 侧和源服务器侧 |
查看日志时,需要确认“这是哪个位置的日志”。
CDN 侧日志、负载均衡器日志、源服务器日志、应用日志中,可见的信息并不相同。
CDN 不是匿名化技术
CDN 是让网站分发更快、更稳定、更容易防御的机制。
它不是为了让使用者匿名的机制。
从使用者角度看,CDN 可能让连接目标 IP 地址变成 CDN,而不是源服务器。但是,这并不保证使用者的匿名性。
CDN 是网站侧的基础设施。
如果连接目标网站、CDN、应用、访问分析、广告标签、认证基础设施组合在一起,使用者的访问会在各种位置被处理。
| 误解 | 实际情况 |
|---|---|
| 经过 CDN 就会匿名 | CDN 是网站侧分发基础设施,不是匿名化技术 |
| 看不到源服务器 IP 就安全 | 使用者的信息仍会在 CDN 或网站侧被处理 |
| HTTPS 下 CDN 也看不到 | 如果 TLS 终止在 CDN,CDN 会处理请求 |
| 缓存就没有日志 | CDN 侧可能保留访问日志 |
思考匿名性时,应把 CDN 作为“连接目标侧的一部分”来处理。
查看 CDN 的官方信息
学习 CDN 时,CDN 服务商的官方说明也可以作为参考。
Cloudflare 是提供 CDN、DDoS 防护、WAF、DNS 等服务的代表性服务商之一。可以通过官方学习页面确认 CDN 是做什么的机制。
URL : https://www.cloudflare.com/learning/cdn/what-is-a-cdn/
不过,这并不是说使用特定 CDN 服务商就安全。
CDN 是网站运营者侧的基础设施,不是完成使用者匿名性的工具。官方信息适合作为理解机制的参考来阅读。
思考匿名性时的确认点
访问使用 CDN 的网站时,使用者侧无法完全了解细节 CDN 结构。
但是,可以整理应当思考的视角。
| 视角 | 确认内容 |
|---|---|
| 连接目标 | 不只是网站,CDN 也可能参与 |
| 日志 | 分开考虑 CDN 侧、源服务器侧、应用侧的日志 |
| IP 地址 | 连接目标 IP 是 CDN 也不等于匿名化 |
| Cookie | 即使经过 CDN,Cookie 和登录状态仍会存在 |
| TLS | 注意 TLS 在哪里终止 |
| 删除 | CDN 缓存中可能残留旧数据 |
CDN 是支撑现代 Web 的重要机制。
同时,在匿名性中,它也是思考“通信在哪里被处理”的重要观察点。
总结
CDN 是把网站数据放在多个地点,并从靠近使用者的地点高效分发的机制。
使用 CDN 后,页面显示会变快,更能承受访问集中和攻击,并能减少源服务器负载。
另一方面,CDN 会作为网站侧基础设施接收请求。
它可能处理访问源 IP 地址、访问时刻、URL、User-Agent、Cookie、通信量等。
CDN 不是匿名化技术。
思考匿名性时,需要把 CDN 理解为“网站侧的中继和处理地点”,并分开考虑连接目标、日志、TLS 终止、缓存和 Cookie。
相关工具
BrowserLeaks WebRTC
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。
Google Search removal tools
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。