华为云 OBS 静态网站托管 + CDN 加速实战:低成本上线一个静态站点
华为云 OBS 静态网站托管 + CDN 加速实战:低成本上线一个静态站点
引言
很多个人开发者和小团队都有这样的需求:上线一个文档站、博客、产品落地页或者活动页——页面全是静态资源,没有后端逻辑。如果为此专门买一台云服务器装 Nginx,不仅浪费,长期下来也是一笔固定开销。
更轻的方案是:对象存储 OBS 做源站 + CDN 做加速。OBS 原生支持静态网站托管,CDN 回源到 OBS,就能得到一个全球访问都很快、按量计费的静态站点。本文记录一次完整实战流程和踩过的坑。
一、方案选型与成本
整体架构很简单:用户 → 华为云 CDN(边缘节点) → 回源 → OBS 桶(静态网站托管)
成本构成只有三块,全部按量计费:1. OBS 存储费用:标准存储按实际用量计费,几个 MB 的静态页面几乎可以忽略;2. OBS 请求费用:CDN 回源时会产生 GET 请求,正常访问下量级很小;3. CDN 流量费用:按实际下行流量计费,小站点一个月通常就几块钱。
对比包月云服务器,这个方案在访问量不大时便宜一个数量级,而且天然高可用,不用操心服务器宕机、打补丁。
二、创建 OBS 桶并开启静态网站托管
1. 创建桶
登录华为云控制台,进入「对象存储服务 OBS」,点击创建桶。几个关键选项:区域选择离你目标用户最近的区域;存储类别标准存储,访问频繁的静态资源用标准存储最划算;桶策略先保持私有,后面单独给网站目录配置公共读,避免整个桶被意外公开。
2. 开启静态网站托管
在桶的「概览」或设置页找到「静态网站托管」,启用它,并配置:索引文档 index.html(访问目录时默认返回的文件);错误文档 404.html(可选,建议配一个,体验好很多)。
开启后,OBS 会给桶分配一个静态网站访问域名,形如 bucketname.obs-website.xx-region.myhuaweicloud.com。记住这个域名,后面配 CDN 回源要用它——不要用普通的 OBS endpoint 做源站,否则会出现 403 或重定向问题,这是最常见的坑。
3. 配置桶策略允许公共读
静态网站要能被公网访问,需要给桶配置允许匿名读取的策略。建议只对网站文件所在前缀授权,而不是整个桶。例如只允许 /* 下的 GetObject 给匿名用户。控制台的桶策略编辑器支持可视化配置,选"公共读"模板即可。
4. 上传网站文件
把 index.html、404.html 以及 css/js/图片上传到桶根目录。可以用控制台直接上传,文件多的话建议用 obsutil 命令行工具批量同步,速度更快。
上传完成后,直接用浏览器访问那个静态网站访问域名,能正常打开页面,说明源站 OK。
三、绑定 CDN 加速
源站调通后,接下来套一层 CDN,让全国乃至全球用户访问都快。
1. 添加加速域名
进入「内容分发网络 CDN」控制台,「域名管理」→「添加域名」:加速域名填你自己的域名,比如 www.example.com;业务类型选择"网站加速";源站类型选择"源站域名",填入上一步的 OBS 静态网站访问域名;回源 HOST 保持与源站域名一致(默认即可)。
再次强调:源站一定要填静态网站托管域名,而不是桶的 REST endpoint。用错域名是 403 报错的头号原因。
2. 配置 HTTPS
现在基本都是全站 HTTPS。在 CDN 域名配置里上传你自己的证书,或者直接申请 CDN 提供的免费证书,一键部署。建议同时开启"强制跳转 HTTPS",把 HTTP 请求 301 到 HTTPS。
3. 配置缓存规则
缓存配得好不好,直接决定回源率和账单。推荐策略:*.html 不缓存或只缓存几分钟,保证内容更新及时生效;*.js、*.css 缓存 7 天以上,配合文件名带 hash 做版本管理;*.png、*.jpg、*.webp、*.woff2 缓存 30 天,图片字体极少变化。
CDN 控制台的「缓存配置」里按文件后缀分别建规则即可。
4. 域名解析切换
最后一步:去你的 DNS 服务商处,把加速域名的 CNAME 解析到 CDN 分配的 CNAME 域名。解析生效后(一般几分钟),访问自己的域名,走的就是 CDN 了。
四、验证与排错
验证缓存是否命中
curl -I https://www.example.com/index.html,看响应头:如果带 HIT 字样说明命中边缘节点缓存,MISS 则是回源了。刚发布完第一次访问基本都是 MISS,多刷两次变成 HIT 就正常了。
更新内容后刷新
改了页面想立刻生效,别干等缓存过期,用 CDN 控制台的「刷新预热」功能,按 URL 刷新那几个改了的文件,一般 5 分钟内全网生效。
常见坑清单
- 403 Forbidden:先查桶策略是否允许公共读,再查 CDN 源站填的是否是静态网站托管域名;2. 访问显示 XML 错误页:说明请求走到了 OBS REST 接口而不是网站托管,大概率源站域名填错;3. index.html 大小写:Linux 风格的精确匹配,Index.html 和 index.html 是两个文件;4. HTTPS 证书不匹配:加速域名和证书里的域名要一致,泛域名证书注意覆盖子域名。
五、成本优化小技巧
图片先压缩再上传,优先用 WebP 格式,一张头图从 2MB 压到 200KB 很常见,CDN 流量费直接打一折;给长期不变的资源设置更长的缓存时间,提高边缘命中率,减少回源请求;定期清理桶里不再用的旧文件,或者配一条生命周期规则,把 90 天没人访问的对象自动转成低频访问存储。
总结
OBS 静态网站托管 + CDN 这套组合,配置下来也就半小时:建桶、开托管、配策略、传文件、CDN 加域名、配缓存、CNAME 切换。对文档站、博客、落地页这类纯静态场景,它比云服务器更便宜、更省心,还自带高可用。
如果你正好有一个静态页面要上线,不妨按上面的步骤走一遍;遇到 403 先查源站域名,八成问题都出在那。
- 点赞
- 收藏
- 关注作者
评论(0)