用阿里云 OSS 托管静态网站
如 果你的网站本质上只是 HTML + CSS + JS + 图片,那么 OSS 往往比继续维护一台云服务器更省事。这篇笔记只回答几个最常见的问题:OSS 能托管什么、什么时候要备案、主域名怎么绑定、原来的服务器能不能停。
先说结论
- 纯静态网站可以直接托管在 OSS 上,常见场景包括文档站、博客静态导出、作品集和落地页。
- 如果只是托管图片、JS、CSS、字体和下载文件,OSS 也很合适;但数据库、后台管理、服务端渲染和定时任务仍然需要别的计算服务。
- Bucket 位于中国内地时,正式通过自定义域名对外提供网站访问,域名需要满足 ICP 备案要求。
- Bucket 位于中国香港或其他海外地域时,通常不需要走中国内地 ICP 备案,但大陆访问体验一般会弱于中国内地地域。
- 直接用 OSS 默认 Bucket 域名访问 HTML,浏览器可能会触发下载而不是正常打开页面;正式上线建议绑定自定义域名。
- 能不能停掉原来的服务器,关键不在于页面能否打开,而在于你的站点是否真的不依赖后端。
OSS 适合托管什么
| 场景 | 是否适合放到 OSS | 说明 |
|---|---|---|
| 文档站、博客静态导出、作品集 | 适合 | 构建产物直接上传即可 |
| 图片、JS、CSS、字体、附件下载 | 适合 | 典型的静态资源托管场景 |
| 前后端分离项目的前端 | 适合 | 前端可放 OSS,API 仍需其他服务 |
| WordPress、PHP、Java、Node 后端应用 | 不适合全站放 OSS | 仍然需要服务器或 Serverless 计算 |
| 只做图床或文件分发 | 适合 | 配合自定义域名和 CDN 更顺手 |
如果你的项目是单页应用(SPA),也能放到 OSS,只是静态网站托管时要按单页应用的方式去配置首页与路由回退。
备案和地域怎么选
阿里云官方关于 OSS 绑定自定义域名的规则,核心可以压缩成两点:
- 中国内地 Bucket + 自定义域名用于网站访问或静态资源访问,域名需要满足备案要求。
- 如果主域名已经完成备案,那么同一主域名下的子域名绑定到 OSS,通常不需要再单独做一次备案。
可以先按下面这张表做选择:
| Bucket 地域 | 是否需要中国内地 ICP 备案 | 适合什么场景 | 取舍 |
|---|---|---|---|
| 中国内地 | 需要 | 面向国内访问的正式站点 | 访问体验更好,但要处理备案流程 |
| 中国香港 / 海外 | 通常不需要 | 想先快速上线,或暂时不做备案 | 部分地区访问延迟更高 |
这里还有一个容易混淆的点:如果你准备在阿里云办理备案,不要默认认为“开了 OSS 就一定能直接备案”。是否具备备案资格、是否有可用备案服务码,要以备案控制台里的可备案实例和账号状态为准。
主域名能不能直接绑定 OSS
可以绑定,但要分成两层理解:
- 从 OSS 侧看,自定义域名是可以绑定的。
- 从 DNS 侧看,根域名(例如
example.com)能不能直接生效,还取决于你的 DNS 服务商是否支持ALIAS或类似的 CNAME 展平能力。
实际操作里更稳妥的做法通常是:
www.example.com、static.example.com这类子域名,直接按官方文档做 CNAME。- 根域名
example.com,先确认 DNS 服务商是否支持ALIAS或同类能力。 - 如果不支持,就让
www作为正式访问地址,根域名做跳转,或者在 OSS 前面再加一层 CDN / 网关。
换句话说,主域名能不能用 不是 OSS 一家的问题,而是 OSS 绑定能力 + DNS 解析能力 共同决定的。
一套更稳妥的上线流程
如果你要把现有静态站迁到 OSS,建议按这个顺序走:
- 先确认网站是否真的是纯静态输出,或者至少前端部分可以独立静态部署。
- 在本地或 CI 中生成构建产物,例如
dist、build或静态导出的out目录。 - 创建 OSS Bucket,并先决定地域是选中国内地还是中国香港 / 海外。
- 上传静态文件。
- 在 Bucket 的静态网站托管配置里设置默认首页
index.html和错误页;如果是 SPA ,按单页应用方式配置。 - 绑定自定义域名,并完成域名所有权验证。
- 到 DNS 服务商处添加解析记录,常见是
CNAME,根域名则看是否支持ALIAS或等价能力。 - 按需补上 HTTPS 和 CDN。
- 测试首页、静态资源、深链路由、404 页面和刷新行为是否正常。
如果你发现“直接访问 Bucket 域名会下载 HTML”,不要怀疑文件坏了,这通常是 OSS 默认访问方式的表现。正式访问路径还是应该落在自定义域名上。
什么时候可以停掉原来的服务器
可以先用一句话判断:只要页面展示不依赖服务端实时参与,你就有机会把服务器停掉。
下面这些情况,通常可以考虑不再续费原来的 ECS:
- Docusaurus、VitePress、Hugo、Jekyll 这类纯静态站点
- React / Vue 前端构建后直接产出静态文件的项目
- 前端页面放 OSS,后端 API 改由其他独立服务提供
下面这些情况,则不能因为“首页能打开”就贸然停服务器:
- WordPress、Typecho 这类依赖数据库和后台管理的站点
- Next.js、Nuxt 等仍在使用 SSR / API Route 的项目
- 需要登录态、文件上传处理、定时任务、搜索索引生成等服务端能力的系统
所以更准确的说法不是“绑了 OSS 就能停服务器”,而是“站点已经完成静态化之后,服务器才可能退出主链路”。
备案不会自动过期,但要避开这些问题
阿里云官方说明里提到,备案号本身没有固定有效期;只要信息真实、变更及时、接入关系正常、内容合规,备案可以长期有效。
真正更需要注意的是这些风险:
- 你主动提交了注销申请。
- 域名过期后被删除或转给他人,新持有者又发起了相关操作。
- 备案信息不真实、不准确,或联系方式失效,导致被取消接入。
- 从一个服务商迁到另一个服务商后,长期没有完成新的接入备案。
- 网站内容涉及违法违规信息。
如果你的主体信息、联系方式或站点接入关系发生变化,正确做法是及时变更或接入备案,而不是放着不管。
适合新手的决策方式
如果你只是想尽快选一条不容易出错的路,可以直接这样判断:
- 想要国内访问更稳,且愿意走备案流程:选中国内地 Bucket。
- 只是临时上线、测试或个人展示,不想先折腾备案:选中国香港或海外 Bucket。
- 网站已经是纯静态产物:优先考虑 OSS。
- 网站还离不开数据库、后台或服务端逻辑:OSS 先托管静态资源,不要急着砍服务器。