OBS 静态网站托管 + 华为云 CDN:缓存与回源注意点
很多人把静态站丢进 OBS 再接 CDN,却遇到首页列出文件、改完还是旧页、私有桶回源 403。本文按华为云公开文档,整理托管开关对齐、缓存 TTL 分层、回源权限与发版刷新的实用注意点,方便对照自检。
一、为什么「托管 + CDN」经常一起配
很多人把文档站、落地页、产品介绍页丢进对象存储,再用 CDN 加速访问。常见的情况是:桶开了静态网站托管,域名也绑了 CDN,但首页列出整桶文件、改完 HTML 半天还是旧页面、或者私有桶回源 403。
华为云侧可以这样理解分工:
- OBS 静态网站托管:把桶当成静态站点源站(默认首页、错误页等)。
- 华为云 CDN:边缘缓存、自定义域名、HTTPS、回源到 OBS。
直接用 OBS 默认域名做网页预览已有限制(不少区域会走附件下载而不是在线渲染),所以生产更常见的是:自定义域名 + CDN → OBS。下面按「容易踩坑的注意点」整理一份实用清单,不写逐步截图教程。
参考文档(公开可核对):
二、先把源站语义对齐:托管开关要两边勾
1. OBS 侧:开启静态网站托管
在桶里配置默认首页(如 index.html)和错误页(如 error.html / 404.html)。托管打开后,访问「站点根路径」时,OBS 会按网站语义返回首页对象,而不是默认的对象列表。
对象本身也要可读:公有读桶,或私有桶配合 CDN 私有桶回源委托。只开托管、对象仍不可读,CDN 回源照样失败。
2. CDN 侧:源站同样勾选「静态网站托管」
很多人只在 OBS 开了托管,CDN 源站仍按「普通桶」回源。结果是访问加速域名根路径时,OBS 仍可能返回桶内对象列表——看起来像「网站被拖库展示」。
官方 FAQ 的处理很明确:
- OBS 开启静态网站托管;
- CDN 控制台 → 域名 → 回源 / 源站配置里,对 OBS 源站勾选 静态网站托管;
- 若节点仍缓存了旧的列表页响应,再对首页做一次 URL 刷新(谨慎用目录刷新,避免整目录打穿回源)。
两处开关缺一,就很容易复现「列出文件列表」这类现象。
三、缓存:按文件类型设 TTL,别一把 30 天
CDN 接入 OBS 桶域名时,常见默认是「所有文件缓存约 30 天」。对图片、字体、带 hash 的打包资源很合适;对入口 HTML / 频繁改的 JS 就不友好——发版后用户还在吃旧首页。
可以按官网「网站加速」建议分层(再按业务微调):
| 类型 | 建议过期时间 | 说明 |
|---|---|---|
动态后缀(.php .jsp .json 等) |
0(不缓存) | 静态站通常很少用到;有接口代理时更要小心 |
.html / .htm / .shtml / 入口 .js |
约 7 天 或更短 | 发版频繁时可再缩短,并配合刷新 |
| 图片、字体、音视频、带内容哈希的静态资源 | 约 30 天 | 文件名带 hash 时可更长 |
优先级提醒:自定义规则优先级更高时,才会盖过默认「所有文件」规则。只改心里预期、不改控制台规则,缓存不会自己变。
我习惯把「会改文案的入口页」和「几乎不变的 /assets/」拆开设 TTL:入口短、资源长,比全局同一个过期时间更稳。
四、回源与权限:私有桶、列表权限、HTTPS
1. 公有桶 vs 私有桶回源
- 公有桶:CDN 可匿名拉对象,简单,但桶可读面更大,生产要更谨慎。
- 私有桶:配置 CDN 时选私有桶回源,系统侧常见会用
CDNAccessPrivateOBS一类委托让 CDN 鉴权拉对象。委托删掉或权限被改坏,就会出现大面积回源 403。
私有桶还可以通过给委托加 拒绝 ListBucket 一类策略,进一步避免「通过加速域名列出对象」。具体策略以当前 IAM / CDN FAQ 为准。
2. 默认域名与自定义域名
OBS 默认域名做网页在线预览受限;自定义域名 + CDN(再配 HTTPS 证书)才是面向用户访问的常规路径。备案、服务范围(中国大陆 / 境外 / 全球)要和加速范围一致,否则调度与合规会对不上。
3. CORS 与防盗链(按需)
跨域拉资源时配 CORS;防盗刷流量时再加 Referer 防盗链。二者都不会随「开启托管」自动生效。
五、发版后怎么让用户看到新页面
缓存是双刃剑。更新 OBS 对象后,可以组合使用:
- 手动刷新:CDN 控制台对变更 URL 做 URL 刷新;首页、关键入口优先。
- 自动刷新:OBS 域名管理里可为加速域名配置自动刷新(对象创建 / 删除等事件 + 前缀/后缀过滤)。适合「上传即失效缓存」的流水线;注意多版本桶、跨租户等限制,以及委托权限要含查询域名与刷新缓存。
- 内容寻址文件名:构建产物带 hash(
app.abc123.js),TTL 可以很长,发版主要刷新index.html。
常见的情况是:只覆盖了 index.html 对象,却忘了刷新 CDN,于是「桶里已经是新文件,浏览器还是旧站」。先查 CDN 缓存再查本地浏览器缓存,排查会快很多。
六、一份可执行的检查表
- [ ] OBS 已开静态网站托管,默认首页 / 错误页对象真实存在且可读
- [ ] CDN 源站指向该桶,并已勾选「静态网站托管」
- [ ] 访问加速域名根路径返回站点首页,而不是对象列表
- [ ] HTML / 入口资源与长缓存静态资源 TTL 已分层
- [ ] 私有桶场景下回源委托仍在,且未误删关键权限
- [ ] HTTPS 证书有效;中国大陆加速域名备案状态正常
- [ ] 发版流程包含「关键 URL 刷新」或「OBS 自动刷新」其一
七、小结
OBS 托管解决「按网站语义吐首页」,CDN 解决「边缘缓存与域名体验」。两边托管开关对齐、TTL 分层、私有桶委托与列表权限想清楚、发版带刷新,就能避开最常见几类坑。控制台文案若有改版,以当前文档为准。
- 点赞
- 收藏
- 关注作者
评论(0)