使用 GitHub Pages 部署网站后,想要将页面绑定到自定义域名,摸索了一下,下面是步骤及踩坑的点。
DNS 配置
顶级域名
在云服务厂商的 DNS 配置下,创建 IPV4 即 A 的解析记录,指向 GitHub Pages 的 IP 地址,这个地址是不会变化的。
我这里只用了 IPV4,所以只配置了A,如果你需要 IPV6,最好同时配置 A 和 AAAA,因为 IPv6 的全局采用速度缓慢。
IPV4
要创建 A 记录,请将顶点域指向 GitHub Pages 的 IP 地址。
1 | 185.199.108.153 |
IPV6
要创建 AAAA 记录,请将顶点域指向 GitHub Pages 的 IP 地址。
1 | 2606:50c0:8000::153 |
创建结果
下图中四个@代表裸域名,即 https://trillobe.com
问题
Q:为什么在 trillobe.com 上,把官方四个 IP 都配置上呢?
A:如果只写一条 A 记录,那么一旦对应那台服务器出现故障,用户就无法访问网站;写全四条,就可以充分利用 GitHub 全球 Anycast 网络,既提速又抗掉线。
子域名
如果有多个网站,希望给子域名,如www.example.com、blog.example.com,需要创建将子域名指向 <user>.github.io 的 CNAME记录。
对应关系
CNAME类型的三个域名分别是我的博客,两个网站,github page 网址与自定义域名对应关系如下:
https://<user>.github.io => https://blog.trillobe.com
https://<user>.github.io/natours => https://natours.trillobe.com
https://<user>.github.io/trillo => https://trillo.trillobe.com
Github Page 配置
在仓库的Setting->Pages里,在 Custom domain 里输入 DNS 配置好的域名,点击 Save,GitHub 会自动进行 DNS 校验,这个过程需要一点时间。
当校验通过以后,就可以勾选下面的强制开启 HTTPS,没错,是不需要申请 SSL 证书的,GitHub 会自动帮申请(虽然是免费的 Let’s Encrtpy)。
再过一会儿,刷新一下,就可以看到个人站点部署完成了,可以进行访问。
注:如果你有多个子域名需要对应到不同的仓库,需要配置多次,重复上述步骤即可
取消 Github Pages 绑定自定义域名
这里是踩坑的地方,花了很多时间 debug,呜呜记录一下
Github Page 类型
查看Setting -> Pages -> Source,会出现两种类型:Github Action 和 Deploy from a branch
如果是 Deploy from a branch,在删除Custom domain 中的域名后,还需要删除Code根目录下的CNAME文件,具体详见 google。
我的是Github Action,没有CNAME。
取消绑定
在仓库的Setting->Pages里,点击移除 Custom domain 中的域名,同时取消勾选 Enforce HTTPS,刷新后,可能会出现以下几种情况(我遇到过的):
例一
Github Page 现在指向 https://<user>.github.io/natours,但是点击跳转还是在自定义域名https://natours.trillobe.com,且Enforce HTTPS 为灰色,无法取消勾选
我尝试的办法:
等待一段时间,DNS 配置生效需要一些时间
清空浏览器缓存
Re-run Github Action 中的 workflow
重新输入一个不存在的 custom domain,然后在解析时 remove 掉,清空浏览器缓存并刷新
例二
Github Page 正常指向https://<user>.github.io/natours,点击打开静态文件加载失败
解决:Re-run Github Action 中的 workflow,清空浏览器缓存再打开就正常了

遇到的问题
trillo 改域名后,页面无法 fetch API 数据

解决:在后端代码 CORS 处加入新增的自定义域名,重跑后端代码,并 CICD 生成新 docker 在 EC2 上运行
重跑后端代码后还是无法 fetch
解决:ssh 到服务器查看运行的 docker container 是哪一个版本,确认无法 fetch 的原因是没有生效最新版本,修改 compose.yaml 让最新版本生效后,网页正常显示
1
2sudo docker ps -a
sudo docker imagenatours 改域名后,页面静态文件无法加载
解决:修改 next.config.js 文件时,nextConfig 导入代码有误,修改后重新编译静态文件加载正常