博客部署在 GitHub Pages 上,原来只能通过 wxcoding.github.io 访问。买好域名后,可以把它绑定到 GitHub Pages 上,让 https://guanwx.me 成为正式地址。全程免费,且因为 GitHub Pages 服务器在境外,不需要备案。
原理
备案拦截的是”域名 + 境内托管”的组合。GitHub Pages 的节点全在境外,域名解析过去不受备案制度约束,绑定即用。
第一步:发布 CNAME 文件(代码侧)
在源码项目的 public/ 目录下创建一个名为 CNAME 的文件(无扩展名),内容只有一行:
guanwx.me
Astro 构建时会把 public/ 里的所有文件原样复制进 dist,随 GitHub Actions 部署一起发布到 Pages 仓库。这个文件的作用是让域名绑定在每次自动部署后不丢失。
第二步:配置 DNS 解析(域名注册商控制台)
在买域名的平台(阿里云/腾讯云)的”域名解析”控制台添加记录:
| 记录类型 | 主机记录 | 记录值 |
|---|---|---|
| A | @ | 185.199.108.153 |
| A | @ | 185.199.109.153 |
| A | @ | 185.199.110.153 |
| A | @ | 185.199.111.153 |
| CNAME | www | wxcoding.github.io |
- A 记录的 4 个 IP 是 GitHub Pages 官方固定地址,指向裸域
guanwx.me - CNAME 让
www.guanwx.me也指向博客 - DNS 生效需要几分钟到几小时
第三步:GitHub 仓库设置
注意:Pages 的自定义域名设置在发布仓库(wxcoding/wxcoding.github.io),不是源码仓库:
仓库 Settings → Pages → Custom domain
→ 填入 guanwx.me → Save
→ 等待 DNS check 通过(打钩)
→ 勾选 Enforce HTTPS
- DNS check 未通过时多为解析还没生效,等几分钟重试
- 证书由 GitHub 通过 Let’s Encrypt 自动签发,勾选 Enforce HTTPS 后可能需要几分钟到一天生效
第四步:更新项目 site 配置
域名生效后,把 astro-paper.config.ts 里的 site.url 从 https://wxcoding.github.io 改为 https://guanwx.me,让 RSS 订阅地址、OG 图链接、sitemap 和文章 canonical 链接全部切换到新域名。
验证
- 浏览器访问
https://guanwx.me,能打开博客且地址栏带锁标即成功 - 旧的
wxcoding.github.io地址会自动 301 跳转到新域名 - 可用
curl -I https://guanwx.me查看响应头确认跳转与证书状态
常见问题
| 现象 | 原因与处理 |
|---|---|
| DNS check 一直不通过 | 解析未生效或记录填错,用 nslookup guanwx.me 验证,等 TTL 过期后重试 |
| 证书报错”尚未签发” | 刚绑域名后证书签发有延迟,等 15 分钟到 1 小时再试 |
| 域名绑定莫名丢失 | 发布分支里缺 CNAME 文件,确认第一步的文件随 dist 发布 |
| Enforce HTTPS 无法勾选 | 证书尚未签发完成,等签发后再勾 |
与境内部署的关系
绑定 GitHub Pages 的域名是境外端上岗;将来备案完成后,域名只需把解析记录切到境内的云服务器(A 记录指向 ECS 公网 IP),GitHub 端把 Custom domain 移除即可——同一个域名,两端分时复用,互不冲突。