参考资料

  1. CDN(内容分发网络)支持缓存分片内容
  2. CDN客户端缓存策略配置指南
  3. CDN强制返回分片内容设置教程
  4. cdn服务器是什么
  5. 多个CDN自动切换互通方案
  6. 允许异步读取源站 设置教程
  7. 重写访问URL
  8. SSL/TLS深度配置指南

如何设置缓存过期时间?

CDN缓存过期时间设置详解

CDN缓存基本原理

CDN(内容分发网络)通过边缘节点缓存资源,设置合理的缓存时间可显著提升网站性能。缓存过期时间决定CDN节点保留资源副本的时长。

主流CDN平台设置方法

1. 阿里云CDN

操作路径
控制台 > CDN > 域名管理 > 缓存配置

配置项

  • 默认缓存规则:设置全局默认缓存时间

  • 目录缓存:按目录路径设置不同缓存时间

  • 后缀名缓存:按文件类型设置缓存时间

  • 精确URL缓存:为特定URL设置独立缓存时间

示例配置

/*.html -> 缓存0秒(即时生效)
/*.js -> 缓存31536000秒(1年)
/images/* -> 缓存86400秒(1天)

2. 腾讯云CDN

操作路径
控制台 > CDN > 域名管理 > 缓存配置

特性

  • 支持缓存继承(跟随源站Cache-Control头)

  • 可设置强制缓存(忽略源站头)

  • 提供缓存键规则配置

示例配置

文件类型为 .css/.js -> 缓存1年
路径包含 /static/ -> 缓存30天
其他 -> 遵循源站(默认7天)

3. AWS CloudFront

配置方式

  • 通过Behaviors设置缓存策略

  • 支持基于查询字符串/headers/cookies的缓存区分

TTL设置

  • Minimum TTL

  • Maximum TTL

  • Default TTL

示例JSON配置

"CachePolicy": {
    "DefaultTTL": 86400,
    "MaxTTL": 31536000,
    "ParametersInCacheKey": {
        "EnableAcceptEncodingGzip": true
    }
}

最佳实践设置方案

静态资源缓存策略

文件类型     缓存时间      配置示例
--------------------------------------------------
HTML       0-300s       Cache-Control: no-cache
CSS/JS     1年           Cache-Control: public, max-age=31536000
图片        1年           Cache-Control: public, max-age=31536000
字体        1年           Cache-Control: public, max-age=31536000

动态内容缓存策略

/api/data?id=*   60s      Cache-Control: private, max-age=60
/user/profile    300s     Cache-Control: private, max-age=300

高级缓存控制技巧

  1. 版本化资源

    <link href="/css/style.css?v=1.2.3" rel="stylesheet">
  2. 缓存自动清理

    • 阿里云:通过API调用刷新缓存

    • 腾讯云:支持目录刷新和URL刷新

    • AWS:支持Invalidation Path设置

  3. 边缘逻辑处理

    # 边缘节点配置示例
    location ~* \.(js|css)$ {
        add_header Cache-Control "public, max-age=31536000, immutable";
    }

验证缓存是否生效

  1. 使用curl检查:

    curl -I https://example.com/static/js/app.js
  2. 浏览器开发者工具:

    • 查看Network标签中的响应头

    • 检查Age头显示资源已缓存时间

  3. 专用检测工具:

    • WebPageTest

    • Catchpoint

    • KeyCDN的缓存检查工具

常见问题解决方案

问题1:更新后CDN不生效

  • 解决方案:立即刷新对应URL缓存或等待TTL过期

问题2:动态内容被缓存

  • 解决方案:设置Cache-Control: private, no-store

问题3:不同地区缓存不一致

  • 解决方案:检查CDN的全球同步配置,或提高刷新频率