用OBS托管静态网站:完整步骤与五个常见坑
为什么选择 OBS 托管静态网站
个人博客、产品文档、活动落地页、前端打包后的单页应用,这类站点只有 HTML、CSS、JS 和图片,不需要服务端执行任何脚本。为它们专门维护一台云服务器,既要装 Nginx、打补丁,又要关心磁盘和带宽,投入明显偏大。
华为云对象存储服务 OBS 支持在桶上开启“静态网站托管”,提供默认首页、错误页和重定向规则。把文件上传到桶里,配好权限和域名,就能得到一个不需要运维服务器的网站。需要注意的是,OBS 不支持 PHP、JSP 这类服务端脚本,凡是需要后端逻辑的部分,仍要交给函数或其他服务处理。
整体流程
按照官方文档,完整链路可以拆成五步:
- 创建桶并上传网站文件;
- 为桶内文件配置匿名用户可读(公共读);
- 开启静态网站托管,设置默认首页和 404 页面;
- 绑定自定义域名并配置 CNAME 解析;
- (可选)开启 CDN 加速和 HTTPS。
下面按顺序展开。
第一步:创建桶并上传文件
在 OBS 控制台创建桶时,桶名会出现在访问域名中,建议只用小写字母、数字和短横线,尽量不要带“.”,否则通过 HTTPS 访问时可能出现证书校验错误。存储类别选择标准存储即可,归档类对象需要先恢复才能被网站访问。
前端项目打包后,可以用 obsutil 批量上传整个目录,比在网页上逐个拖拽更可靠:
# 先在本地完成构建,例如 npm run build 生成 dist 目录
obsutil cp ./dist obs://my-site-bucket -r -f
上传后建议抽查几个文件的 Content-Type,确认 HTML、CSS、JS 被识别成了正确的类型,否则浏览器可能无法正确渲染样式或执行脚本。
第二步:配置公共读权限
静态网站要被所有访客打开,文件必须对匿名用户可读。最省事的做法是在桶的“访问权限控制 > 桶策略”中使用公共读模板。这一步意味着桶内所有对象都可以被任何人读取,因此网站桶应当只放网站文件,不要顺手把日志、备份或配置文件也传进去。
另外,公网访问会产生流出流量费用和请求费用,上线前最好对访问量有个大致估算。
第三步:开启静态网站托管
进入桶后,在“数据管理 > 静态网站托管”中开启托管并选择“配置到当前桶”,把默认首页设为 index.html,默认 404 错误页面设为 error.html 之类的文件。官方文档说明配置会在两分钟内生效。
除此之外还可以配置重定向规则,或者把整个站点重定向到另一个桶或域名,适合网站迁移时保留旧地址。
第四步:绑定自定义域名
在桶的“域名管理”中配置自定义域名,例如 www.example.com,然后到 DNS 服务商处添加一条 CNAME 记录。若域名托管在华为云云解析服务,控制台支持一键解析;其他注册商则需要手动添加。CNAME 记录值请以控制台给出的提示为准,未开启 CDN 时指向 OBS 提供的桶域名,开启 CDN 后则指向 CDN 分配的加速域名。
可以用 dig 简单验证解析是否生效:
dig +short www.example.com CNAME
curl -I http://www.example.com/
如果 curl 返回 200 且 Content-Type 为 text/html,说明链路基本打通。
五个常见坑
坑一:用默认域名访问,网页变成下载。 这是新手遇到最多的问题。基于安全合规要求,OBS 禁止通过默认域名(桶访问域名或静态网站访问域名)在线预览网页,响应头会被强制加上 Content-Disposition: attachment,浏览器表现为下载文件。这不是配置错误,解决办法只有一个:绑定自定义域名后再访问。
坑二:中国大陆区域没做 ICP 备案。 按照工信部要求,桶在中国大陆区域时,绑定的自定义域名需要提前完成 ICP 备案。备案周期不短,建议在项目初期就提交,或者在规划阶段就确定桶所在区域。
坑三:开了 CDN 又变回下载。 自定义域名开启 CDN 加速后,访问 HTML 可能再次变成强制下载。官方给出的处理方式是在 CDN 域名的“高级配置”里添加响应头 Content-Disposition,取值为 inline;改完后记得刷新 CDN 缓存并清理浏览器缓存再验证。
坑四:公共读暴露了不该公开的文件。 公共读作用于整个桶。一个常见失误是把 .env 或打包前的源码目录一起上传,这些文件同样能被任何人直接下载。养成习惯:网站单独一个桶,上传前检查目录内容,必要时配合防盗链限制 Referer。
坑五:单页应用刷新后 404。 Vue、React 等使用 History 路由的应用,直接访问 /about 这类路径时,桶里并不存在对应对象,就会返回错误页。常见的折中做法是改用 Hash 路由,或者把错误页配置为 index.html 让前端路由接管,但后者返回的状态码可能不是 200,对搜索引擎收录有影响,需要根据业务权衡。
总结
用 OBS 托管静态网站,本质上就是“上传文件 + 公共读 + 开启托管 + 自定义域名”四件事,省掉了服务器的安装和运维。真正容易卡住的地方不在技术本身,而在合规与配置细节:默认域名不能直接预览网页,大陆区域需要备案,CDN 场景要补 inline 响应头,公共读意味着整桶可见。把这几点提前想清楚,一个轻量、稳定的静态站点大约半小时就能上线。建议动手前先通读一遍官方的“静态网站托管”和“通过自定义域名访问桶”两篇文档,再结合本文的清单逐项核对。
- 点赞
- 收藏
- 关注作者
评论(0)