← 返回首页

用 Cloudflare 免费托管静态站点:从 GitHub 仓库到自己的域名

2026-10-21 · 部署笔记 · 约 5 分钟读完

给个人主页找一个"能给别人看"的地址,通常有两条路:买国内主机(要备案、按年付费), 或者把静态文件放到 Cloudflare 这类平台上(免费、自带 HTTPS、推一次代码就自动部署)。 这个站走的是第二条路。下面是完整过程,以及我中途真正卡住的地方。

整体链路

只有四个环节,中间没有任何编译步骤:

本地 HTML / CSS / JS
      └─ git push → GitHub 仓库
                        └─ Cloudflare Workers(连接 Git,自动构建)
                              └─ 自定义域名 shackle0412.vip + 自动 HTTPS

因为是纯静态页面,不需要 Node、不需要打包:写什么文件,线上就是什么文件。 这也是我把构建命令留空的原因——没有构建,就没有构建失败。

四个步骤

1. 本地写好文件

站点放在一个 public/ 目录里:index.html、styles.css、app.js, 再加 SEO 需要的 robots.txt、sitemap.xml、404.html 和 assets/。 本地预览用一条命令就能起一个 HTTP 服务,改完刷新即可。

2. 推到 GitHub

仓库公开或私有都可以(私有仓库同样能被 Cloudflare 读取)。 我的做法是本地 git init 之后建仓库并推送,让 GitHub 上有一份"源文件备份", 这样换任何托管平台都只是改一个连接。

3. Cloudflare Workers 连接 Git 仓库

之后每次 git push,Cloudflare 会自动构建并发布,构建历史和每次的版本 ID 都能在控制台看到。

4. 绑定自己的域名

在 Worker 的「域」里添加自定义域名,Cloudflare 会自动为该域名建好所需的 DNS 记录并签发证书。 前提是这个域名已经作为一个站点(zone)添加进 Cloudflare 账户,并且域名的 NS 已经指向 Cloudflare。

NS 是替换,不是新增。要到域名注册商的控制台里,把原来的两条 NS 记录改成 Cloudflare 给的两条;添加第三、第四条只会让解析变得不确定。

真正卡住我的五个坑

坑 1:workers.dev 的默认域名不稳定

部署成功后会先拿到一个 *.workers.dev 的地址。这个域名在部分网络环境下解析结果异常, 时快时慢、甚至打不开——换句话说,它不能作为"发给别人看"的最终地址。 这也是为什么"绑定自己的域名"不是可选装饰,而是必需品。

坑 2:_redirects 写错会让构建直接失败

我为了让 www 跳到主域名,加了一个 _redirects 文件,把来源写成了完整网址:

# 错误写法(我当时的实际配置)
https://www.shackle0412.vip/*  https://shackle0412.vip/:splat  301

结果构建 25 秒后失败。原因是这个文件的来源必须是路径(比如 /*), 不能是完整 URL;跨域名的跳转应该用 Cloudflare 的「重定向规则」,而不是这个文件。 改成下面这样、或者干脆删掉它,构建立刻恢复:

# 正确写法(仅限同域内的路径跳转)
/*  /index.html  200

坑 3:域名实名审核期间,改 NS 是不会生效的

国内注册商注册的域名要实名认证。审核期间域名处于 serverHold 状态: DNS 查询不到任何 NS 委派记录,此时在注册商后台把 NS 改成 Cloudflare 的两条也没用—— 注册局的委派还没放出来。判断方法很简单,直接查一下:

# 有委派:返回两条 NS
# 无委派:ENOTFOUND / Non-existent domain
node -e "require('dns').promises.resolveNs('你的域名').then(console.log).catch(e=>console.log(e.code))"

看到 ENOTFOUND 就先等审核,别反复改配置。

坑 4:构建成功 ≠ 新版上线

控制台里能看到一条绿色的构建记录,但页面上仍是旧内容——先别慌着怀疑缓存。 最快的验证办法是打开一个内容会随改动变化的小文件(比如 sitemap.xml): 如果里面已经是新域名,说明新版本确实生效了。

坑 5:分享卡片图要自己准备

og:image 指向的图片如果没有真的放在对应路径上,把链接发到微信、QQ、 社交平台时就不会有缩略图,只有一行光秃秃的网址。 按 1200×630 做一张放上去,成本极低,效果差别很大。

成本

一句话总结:静态站点不要买服务器——写好文件、推到 GitHub、交给 Cloudflare, 剩下的精力留给内容本身。

← 返回首页