课程笔记:CDN 缓存配置
课程名称:计算机网络应用 核心摘要:本讲围绕阿里云 CDN 域名管理下的边缘节点缓存配置展开,讲解如何通过设置缓存过期时间、状态码缓存、自定义响应头、自定义错误页面及 URI 重写等策略,将源站静态资源缓存至离用户最近的 CDN 节点,从而减少回源链路、提升访问效率。
一、 核心概念与原理
- CDN 加速原理:当对静态资源进行 CDN 加速时,可将源站上的资源缓存到距离用户最近的 CDN 边缘节点上;用户访问时直接从节点缓存读取,避免较长的回源链路,提升访问效率。
- 缓存配置的本质:针对缓存策略做配置,而非缓存内容本身。通过策略控制"哪些资源缓存多久、哪些不缓存、命中失败如何响应"。
- 配置入口:阿里云 CDN 控制台 → 域名管理 → 缓存配置(各 Tab 页均提供"如何进行设置"的引导提示,文档较为完善)。
二、 技术细节与协议分析
2.1 缓存过期时间配置
可按以下维度定制缓存有效期,且支持多条规则叠加:
| 配置维度 | 适用对象 | 示例 | 推荐时长 |
|---|---|---|---|
| 按目录 | 该目录下所有静态资源文件 | /images/ | 视资源更新频率而定 |
| 按文件后缀 | 指定后缀类型的文件 | jpg、js、css | 图片建议以月为单位;JS/CSS 等变更频繁的可设较短周期 |
| 多规则组合 | 同时添加目录与后缀规则 | 目录 + 多个后缀 | 通过权重区分生效优先级 |
- 权重机制:当目录规则与后缀规则对同一文件同时生效时,权重大者优先。
- 时间单位:支持以秒、天、月为单位设置。
2.2 状态码缓存配置
针对静态资源、指定目录或文件后缀,按HTTP 状态码设置缓存过期时间,过期后自动删除缓存。
| 状态码类别 | 代表状态码 | 缓存行为 |
|---|---|---|
| 不缓存 | 303、304、401、407 等 | 此类响应不再进行缓存 |
| 可缓存 | 204、305、400 等 | 此类响应进行缓存 |
生效优先级规则:
- 若源站响应中携带
Cache-Control缓存头,则遵循源站的缓存策略。 - 若未设置状态码、也未设置过期时间,则默认缓存 1 秒。
- 若针对特定状态码(如 301)既配置了状态码规则又设置了过期时间(如 1000 秒),则按配置的时间生效。
- 若同时配置了目录与文件后缀两种过期规则,由于该处不提供优先级设置,先配置的规则优先级更高、先生效。
2.3 自定义 HTTP 响应头
- 可对边缘节点返回的响应头进行自定义新增、修改、删除。
- 配置方式与缓存过期规则类似,按需添加指定 Header 即可。
2.4 自定义错误页面
当源站返回特定错误状态码时,CDN 可重定向到预先定义好的错误页面:
| 状态码 | 含义 | 处理方式 |
|---|---|---|
| 404 | 服务器上不存在该网页 | 跳转到自定义 404.html |
| 400 | 请求有误(Bad Request) | 跳转到对应错误页 |
| 405 | 禁用请求中指定的方法(Method Not Allowed) | 跳转到对应错误页 |
| 500 | 服务器遇到错误(Internal Server Error) | 跳转到对应错误页 |
| 503 / 504 | 服务不可用 / 网关超时 | 跳转到对应错误页 |
- 错误页面(如
404.html)需在源站服务端(如 Nginx)预先定义并部署。
2.5 URI 重写
当用户请求的 URI 与源站实际路径不匹配时,通过重写机制进行改写或跳转。
典型场景:用户仍使用旧协议/旧路径访问(如 http://example.com/hello),但服务端路径已变更,需将其重定向到新地址。
执行规则选项:
| 选项 | 说明 |
|---|---|
| 执行 302 跳转 | 匹配规则后以 302 状态码重定向到目标 URI |
| 匹配后不再继续 | 若请求 URI 匹配当前规则,执行完本规则后不再匹配剩余规则(即到此终止) |
三、 实践应用与配置命令
3.1 缓存过期时间配置示例(控制台操作)
# 按文件后缀配置(控制台添加规则)
规则类型:文件后缀
后缀: jpg
过期时间:1 月
权重: 50
规则类型:文件后缀
后缀: js
过期时间:6 月 # JS 变更相对频繁,按需缩短
权重: 50
# 多规则冲突时:权重大者生效;可同时叠加目录规则
3.2 状态码缓存配置示例
# 对指定后缀设置状态码缓存
规则类型:文件后缀
后缀: css
状态码: 301
过期时间:1000 秒 # 既设状态码又设时间,按该时间缓存
# 不缓存的状态码(如 303/304/401/407)会自动跳过缓存
# 源站返回 Cache-Control 时,遵循源站策略
3.3 源站错误页面定义(Nginx 示例)
server {
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
}
四、 重点与难点提示
- 缓存策略 ≠ 缓存内容:CDN 缓存配置的核心是策略(有效期、状态码、权重),而非具体缓存数据。
- 权重与顺序两套优先级:缓存过期时间用权重区分;状态码缓存中目录与后缀冲突时用配置先后顺序区分,二者机制不同,切勿混淆。
- 遵循源站原则:源站响应
Cache-Control头时,CDN 默认遵循源站策略,控制台配置仅在源站未指定时生效。 - 默认缓存 1 秒:未设置状态码且未设置时间时,默认仅缓存 1 秒,是常见踩坑点。
- 不缓存状态码集:303、304、401、407 等表示不缓存;304 本身是"协商缓存"响应,CDN 不会缓存该响应体。
- URI 重写的终止性:勾选"匹配后不再继续"会终止后续规则匹配,规则编排顺序很关键。
- 面试高频点:CDN 回源链路、Cache-Control 与 CDN 缓存的协同、状态码缓存策略、302 重写跳转。
五、 课后疑问/遗留问题
- 当多级 CDN 节点(L1/L2)层级缓存时,过期时间与权重策略在各层级是否一致生效?
Cache-Control: no-cache与no-store在 CDN 边缘节点的具体行为差异是什么?- URI 重写规则中正则匹配的性能开销与规则数量上限如何评估?
- 自定义响应头与源站返回头同名时,是覆盖还是追加?后续课程待补充。