CDN 与对象存储

网站图片、视频和下载资源为什么要用对象存储加 CDN

网站不是只有服务器。图片、视频、下载文件、CSS 和 JavaScript 会持续产生流量,把它们放进对象存储并通过 CDN 分发,能让性能和成本都更可控。

对象存储与 CDN 全球分发示意图
示意图:对象存储保存原始资源,CDN 节点把高频内容分发给用户。

一、先分清对象存储和 CDN 的角色

对象存储适合保存图片、视频、附件、下载包、日志归档和备份。它不负责运行网站程序,也不替代数据库。CDN 是内容分发网络,负责把静态资源缓存到边缘节点,让用户从更近的节点获取内容,减少源站带宽压力。一个负责存,一个负责分发,两者经常一起出现。

对客户解释时可以用网站图片举例:原图放在对象存储,网页里引用 CDN 域名,用户访问图片时先到 CDN 节点,节点没有缓存再回源到对象存储或源站取文件。命中缓存后,后续用户就能更快拿到图片,源站也不用重复传输同一个文件。

二、哪些资源适合缓存,哪些不适合

适合缓存的资源通常是变化不频繁、可公开访问、重复请求多的内容,例如产品图片、文章配图、CSS、JavaScript、字体、视频封面、下载文件和公开文档。带版本号或内容哈希的资源可以设置较长缓存时间,因为文件名变化就代表内容变化。这样浏览器和 CDN 都能放心缓存。

不适合公共缓存的资源包括登录页面、后台接口、购物车、用户个人资料、合同、订单数据和需要权限控制的文件。HTML 页面要看更新频率和业务类型,内容站可以短缓存,后台和动态页面应谨慎。缓存策略不是越长越好,而是要让更新速度、访问速度和安全边界保持平衡。

三、回源配置决定 CDN 能不能拿到内容

CDN 的源站可以是云服务器、公网 IP、对象存储域名或源站域名。配置时要确认回源协议、端口、Host 头、HTTPS 证书和源站权限。如果对象存储是私有桶,还需要配置 CDN 的访问身份或签名方式,不能为了省事直接把所有资源改成公开写入。

出现图片不显示时,先不要猜。按域名解析、CDN 状态、回源地址、源站是否能打开、文件路径大小写、权限、Content-Type、HTTPS 和缓存的顺序检查。浏览器 Network 面板里的状态码最有价值:200 表示成功,403 多半是权限,404 多半是路径,502/504 常见于回源失败。

四、TTL 要按资源类型设置

TTL 是缓存时间,决定 CDN 节点保存资源多久。带版本号的 CSS、JavaScript、图片和字体可以设置较长时间,例如 7 天、30 天甚至更长;HTML 和经常更新的 JSON 可以设置较短时间,例如几分钟到一小时;后台接口、用户数据和支付相关请求不应随意缓存。

如果资源经常替换但文件名不变,就算你更新了对象存储,用户也可能继续看到旧图。这不是 CDN 错,而是缓存策略和发布方式不匹配。更稳的做法是文件变更时换文件名,或者发布后做缓存刷新。运营团队需要知道图片命名、上传路径和刷新方式,否则后续内容更新会反复出问题。

五、验证不能只看网页能打开

CDN 生效验证至少包括 DNS 是否指向 CDN、响应头是否出现 CDN 厂商标识或缓存状态、不同网络访问是否正常、HTTPS 证书是否覆盖加速域名、源站日志是否减少重复请求、静态资源是否使用 CDN 域名。只看首页打开,无法证明静态资源真的经过 CDN。

交付时建议提交几类截图:CDN 配置、加速域名、源站回源、DNS 解析、浏览器访问效果和 Network 响应头。再附一段说明:源站是谁、缓存什么、TTL 怎么设、如何刷新、如何判断命中。这样客户能理解 CDN 的价值,也方便后续继续购买流量和加速服务。

常见问题

对象存储能不能直接当网站服务器?

对象存储适合保存静态文件,不适合运行动态程序。静态网站可以用对象存储托管,但 WordPress、后台系统和接口服务仍需要服务器或其他计算服务。

为什么图片已经上传了网页还不显示?

常见原因是路径不一致、大小写错误、权限不足、HTTPS 混合内容、CDN 回源失败或缓存未刷新。应先看浏览器 Network 状态码。

CDN 缓存时间越长越好吗?

不是。带版本号的静态资源适合长缓存,经常更新的 HTML 或接口要短缓存,私有和动态数据不应公共缓存。

准备给网站接入对象存储和 CDN?

先梳理图片、视频、下载、CSS、JavaScript 和 HTML 的更新频率,再确定存储路径、回源方式和缓存 TTL。

咨询 CDN 与存储