在 CDN 控制台为特定目录设置缓存过期时间为 0 秒,是实现该目录资源不缓存的标准做法,适用于后台管理、动态生成文件等需要实时获取源站内容的场景。
先说结论:主流 CDN 厂商均支持通过缓存规则将特定目录的过期时间设为 0 来实现不缓存,但需注意源站压力风险。
- 适合:后台管理目录、频繁变动的配置文件、动态脚本
- 先准备:确认目录路径格式(是否带斜杠)、登录 CDN 控制台、评估源站承载能力
- 验收:通过 curl 检查响应头 Cache-Control 字段及 X-Cache 状态
核心风险警告
设置缓存时间为 0 秒意味着 CDN 节点不会存储该资源,所有请求都将直接回源。在生产环境中需特别注意:
- 源站压力:若该目录访问量较大(如 QPS 超过 100),可能导致源站 CPU 飙升、带宽打满甚至服务宕机。
- 建议方案:若非绝对实时场景,建议设置较短缓存时间(如 10 秒)而非 0 秒,以减轻源站负载。
- 监控告警:配置生效后,务必监控源站服务器的 CPU、内存及带宽使用率,设置异常告警。
主流厂商配置实操
不同 CDN 厂商的控制台字段略有差异,以下是主流厂商的具体配置路径及关键选项:
阿里云 CDN
- 登录 CDN 控制台,进入【域名管理】,点击目标域名后的【管理】。
- 左侧导航选择【缓存配置】->【缓存过期时间】。
- 点击【添加规则】,类型选择【目录】,内容栏输入路径(如
/admin/)。 - 过期时间设置为【0 秒】。
- 关键步骤:勾选【忽略源站 Header】或选择【强制缓存】,防止源站返回的长缓存头覆盖 CDN 设置。
- 点击【确认】,配置通常 1-10 分钟内生效。
腾讯云 CDN
- 登录 CDN 控制台,进入【域名管理】,点击目标域名。
- 选择【缓存配置】标签页。
- 点击【添加规则】,匹配类型选【路径匹配】,输入目录路径。
- 缓存过期时间设为【0 秒】。
- 确认【遵循源站 Cache-Control】选项是否关闭,若需强制不缓存,建议关闭该选项。
验证与监控
配置完成后,不要只看控制台状态,必须通过实际请求验证是否真正回源。
1. 命令行验证
使用 curl 命令查看响应头,重点关注Cache-Control和X-Cache字段:
curl -I -v https://你的域名/admin/config.js
预期结果:
Cache-Control:应包含no-cache、no-store或max-age=0。X-Cache:多次请求应显示MISS(表示每次均回源),若显示HIT则说明仍被缓存。Expires:时间应为当前时间或过去时间。
2. 源站监控
观察源站访问日志,确认该目录的请求频率是否显著增加。若发现异常流量峰值,应立即调整缓存策略。
常见故障排查
- 路径匹配失败:目录匹配时,注意末尾斜杠。
/admin和/admin/在某些 CDN 规则中被视为不同路径,建议统一带上末尾斜杠。 - 优先级冲突:若同时存在“所有文件缓存 30 天”和“/admin/缓存 0 秒”的规则,确保目录规则的优先级更高。通常具体路径规则优于通配符规则。
- 源站头覆盖:部分 CDN 默认遵循源站响应头。如果源站返回了
Cache-Control: max-age=3600,CDN 可能忽略你的 0 秒设置。需在 CDN 控制台开启“忽略源站 Header”或“强制缓存”选项。 - 参数影响:确认是否忽略了查询参数。有时文件路径相同但参数不同(如
?v=1),可能被当作不同资源处理,建议在缓存规则中配置“忽略参数”。
参考来源
- 天翼云 - 如何设置指定目录或文件不缓存-CDN 加速 - 常见问题 - 缓存配置
- 新手站长网 - 阿里云 CDN 设置不缓存某个目录或者文件的方法
- 腾讯云开发者社区 - CDN 如何设置部分文件缓存,部分文件不缓存直接回源
- 51CTO 博客 - 阿里云 CDN 深度使用之缓存设置