CDN 究竟做了什么
内容分发网络(CDN)是一组在地理上分布部署的缓存服务器——称为 边缘节点 或 PoP(接入点)——它们位于您的访客与您的 源站 服务器之间。当有人请求某个页面时,请求会被路由到最近的边缘节点,而不是一路传输到您的源站。如果边缘节点已经缓存了该资源的副本,它会立即返回。这缩短了网络往返时间,为源站分担了流量,并能吸收突发的访问高峰。
收益最大的是 静态资源——图片、CSS、JavaScript、字体、视频和下载文件——这些都可以被积极缓存。CDN 还能提升可用性:如果您的源站短暂变慢或宕机,许多 CDN 可以继续提供过期(stale)内容。对于沙特和海湾地区(GCC)的受众而言,选择靠近用户的边缘位置(并将源站保留在沙特境内)既能降低延迟,又能为存放真实数据的源站提供 数据驻留以及 PDPL/NCA 合规 支持。
本指南将带您完成一套与厂商无关的 CDN 配置流程,几乎适用于任何服务商。
第 1 步:准备您的源站
在接入 CDN 之前,请确保您的源站服务器返回干净且可缓存的响应。
- 通过 HTTPS 提供网站服务,并配备有效证书。CDN 倾向于(许多甚至要求)与源站之间使用 TLS。
- 确保资源拥有稳定的 URL。为构建产物使用 带指纹的文件名(例如
app.4f2a9c.js),这样您可以将它们缓存一年,同时在部署时仍能让缓存失效。 - 确认您的源站发送了正确的
Content-Type响应头——标注错误的资源会破坏缓存。
如果您使用 Skyline Cloud 主机或 VPS 托管,您的源站已经位于沙特境内,这能让面向区域内访客的源站到边缘的路径保持简短。
第 2 步:在源站设置缓存控制(cache-control)头
CDN 会遵循您源站发送的缓存头。这是最关键的一步。为不可变的静态资源设置较长的有效期,而为动态 HTML 设置较短或不缓存。
Nginx 示例:
# Long-lived, fingerprinted static assets
location ~* \.(?:css|js|woff2|png|jpg|jpeg|gif|svg|webp)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
# HTML — let the CDN revalidate, keep it fresh
location / {
add_header Cache-Control "public, max-age=0, s-maxage=300, must-revalidate";
}
Apache(.htaccess)示例:
<FilesMatch "\.(css|js|woff2|png|jpg|jpeg|gif|svg|webp)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
请注意 max-age(浏览器缓存)与 s-maxage(共享/CDN 缓存)之间的区别。使用 s-maxage 可以让您在边缘将 HTML 缓存例如 5 分钟,同时让浏览器始终重新验证。
第 3 步:将 CDN 指向您的源站
每个 CDN 都需要知道从哪里拉取内容。在 CDN 控制台中,您要创建一个 分发(distribution)(有时称为区域 zone 或拉取区域 pull zone),并进行如下设置:
| 设置项 | 典型值 |
|---|---|
| 源站主机(Origin host) | origin.example.com 或您的服务器 IP |
| 源站协议(Origin protocol) | HTTPS |
| Host 头(Host header) | 您的公开域名 |
| 缓存键(Cache key) | URL 路径(仅当查询字符串会改变内容时才将其纳入) |
请使用一个专用的 源站主机名(例如 origin.example.com),将其与您的公开域名分开。这样可以在公开域名指向 CDN 之后避免重定向环路,并让您能够直接访问源站进行调试。
第 4 步:将您的 DNS 迁移到 CDN
现在将公开流量经由边缘进行路由。常见有两种模式。
CNAME 扁平化 / 子域名(最常见): 将您的主机名指向 CDN 的边缘主机名。
www.example.com. CNAME d1abc2.cdn-provider.net.
顶级/根域名(Apex/root domain): 根据 DNS 规范,根域名不能使用普通的 CNAME。请使用您 DNS 服务商的 ALIAS/ANAME/CNAME 扁平化功能,或通过 A/AAAA 记录使用 CDN 提供的任播(anycast)IP。
如果您使用 Skyline 的托管 DNS,您可以在一处编辑这些记录,并在切换期间保持较低的 TTL(例如 300 秒),以便变更能够快速传播生效。
第 5 步:在边缘启用 HTTPS
在 CDN 上 为您的域名配置 TLS 证书。大多数 CDN 都提供免费的自动化证书(ACME/Let's Encrypt)。然后:
- 强制 HTTPS——在边缘将 HTTP 重定向到 HTTPS。
- 启用 HTTP/2 或 HTTP/3(QUIC),以获得多路复用、更快速的连接。
- 保持与源站之间的 TLS 处于启用状态(full/strict 模式),使流量实现端到端加密。
对于邮件及其他记录,请记住 CDN 只会影响您指向它的那些记录。请保持您的 MX 和邮件记录原封不动——相关内容请参阅 企业邮箱托管。
第 6 步:验证缓存是否生效
DNS 传播完成后,确认资源是否从边缘提供。检查响应头:
curl -sI https://www.example.com/assets/app.4f2a9c.js | grep -iE 'cache|age|server|cf-|x-cache'
留意缓存状态相关的响应头:
- 第二次请求时出现
HIT(第一次通常是MISS,用于填充边缘缓存)。 - 随时间递增的
Age响应头。 - CDN 的
Server或厂商专有响应头,用以确认请求是由边缘处理的。
从多个地区进行测试,以确认全球路由正常。然后在浏览器开发者工具的 Network(网络) 标签页中加载页面,检查已缓存资源的 首字节时间(TTFB) 是否下降。
第 7 步:处理缓存失效
当您部署时,需要让最新内容立即上线。有两种策略:
- 带指纹的文件名(首选): 新构建 = 新 URL = 无需失效操作。旧文件会自然过期。
- 清除(Purge): 对于 HTML 或无法重命名的文件,可从 CDN 控制台或 API 触发清除——可以是全量清除,也可以是针对特定路径的清除。优先使用针对性清除,以保持缓存处于热(warm)状态。
常见陷阱
- 缓存了动态/需认证的页面。 切勿缓存带有
Set-Cookie或包含按用户区分数据的响应。对已登录会话以及/cart、/account、管理后台路径绕过缓存。 Vary设置不正确。 如果您按Accept-Encoding或语言提供不同内容,请正确设置Vary,否则 CDN 可能会提供错误的变体。- 忘了源站依然重要。 CDN 能加速分发,但缓慢的源站仍会拖累缓存未命中(cache miss)和动态请求。请让您的源站保持快速,并靠近您的用户。
从 Skyline Cloud 开始
一个快速的网站,始于一个快速、位于沙特境内的源站和干净的缓存头——其余的交给 CDN。Skyline 为您提供云主机、VPS、托管 DNS 和 SSL,并配有本地阿拉伯语支持以及兼顾 PDPL/NCA 的数据驻留方案,让您的源站保持合规,同时内容飞速送达边缘。
在 Skyline Cloud 上创建您的账户,立即让您的源站和 DNS 为 CDN 做好准备。
Comments
0 total · 0 threads