给GitHub托管的网站配置自定义的域名实际上是非常简单的,而且官方有很多文档说明。 但是,如果在GitHub托管了多个网站,每个网站想要配置不同的域名,却找不到相关的文档。在网上搜索,不少人说只能托管一个网站对应一个自定义域名。实际上是可以托管多个网站,使用不同域名的,而且也不复杂。
内容目录
背景
GitHub Pages 可以非常方便的托管静态网页,而且是免费的。所有在GitHub中创建的仓库都有对应的URL地址。
假设你的GitHub用户名是”username”, 如果使用特定名称”username.github.io”创建仓库,那么GitHub Pages将为该repo生成对应的网站地址”http://username.github.io”。
如果你想使用你自己的自定义URL,你可以在阿里云,腾讯云或GoDaddy等购买一个域名并按照 GitHub的文档说明,将域名链接到 GitHub Pages 网站。
问题
比如我有一个个人网站托管在GitHub对应的”username.github.io”这个repo中,我网站的地址就是https://username.github.io
。然后我有一个域名”blacksnow.fun”, 并将其连接到我的repo中,所以我也可以通过https://blacksnow.fun
来访问我的个人网站。
这时,如果我在GitHub中也有其他几个项目,它们也都有自己的GitHub Pages网站。例如,有个项目网站叫project-one,根据GitHub Pages URL的规则,可以从username.github.io/project-one
访问。因为已经配置了一个域名,也可以从blacksnow.fun/project-one
访问。 同样,在创建任何其他GitHub Repo的项目站点都位于blacksnow.fun/<project name>
。所以看起来GitHub可以非常方便的托管多个静态网站项目。
但是,如果这个时候需要给其中一个GitHub Pages Repo单独配置一个域名,使其和我的个人网站有不同的URL地址,这就出问题了,翻了翻GitHub Pages的说明文档,找不到任何的说明。网上很多资料都是介绍如何绑定自定义域名的,但是如何给不同的项目绑定不同的域名却很少,有的甚至回答只能用一个域名托管一个网站,这显然是不对的,GitHub原本就可以托管多个网站,现在的问题只是如何能够绑定不同的域名。而每次修改URL/DNS可能都有等待数个小时才能生效,所有我还是写个文档记录一下,为下其他人节省时间。当然还有一个解法是注册多个GitHub账号,然后每个账号里放不同的项目,然后每个绑定一个独立的域名,也可以分离,反正GitHub账号是免费的。不过对于我来说分到不同账户里管理起来太不方便了。
解决方案
设置具有不同域名的站点的解决方案实际上非常简单:几乎是重复之前个人网站设置完全相同的步骤。
我是之前在GoDaddy购买的域名,如果使用其他域名服务商,设置应该也都一样. 以下的步骤是建立在已经在GitHub中设置了一个个人站点,并且已经完成了域名绑定,比如我当前的站点blacksnow.fun
。然后现在设置的第二个站点的步骤如下:
Step 1: 开启GitHub Pages
在GitHub对应的Repo种,打开设置页面,从侧边栏中找到 GitHub Pages 选择一个 Source 的branch分支. 打开GitHub Pages功能,然后当前Repo的页面就可以通过blacksnow.fun/<project name>
访问了。
Step 2: 设置DNS解析记录
在DNS设置中,按照如下增加A记录,AAAA记录和CNAME记录:
- 增加
A
记录,Host为@
,将顶级域名指向GitHub Pages的IP地址:185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153
- 增加
AAAA
记录, Host为@
,仍然指向GitHub Pages的IPv6地址:2606:50c0:8000::153 2606:50c0:8001::153 2606:50c0:8002::153 2606:50c0:8003::153
- 确定是否正确,可以使用
dig
命令,将命令中example.com
替换为自己的域名$ dig EXAMPLE.COM +noall +answer -t A > EXAMPLE.COM 3600 IN A 185.199.108.153 > EXAMPLE.COM 3600 IN A 185.199.109.153 > EXAMPLE.COM 3600 IN A 185.199.110.153 > EXAMPLE.COM 3600 IN A 185.199.111.153
$ dig EXAMPLE.COM +noall +answer -t AAAA > EXAMPLE.COM 3600 IN AAAA 2606:50c0:8000::153 > EXAMPLE.COM 3600 IN AAAA 2606:50c0:8001::153 > EXAMPLE.COM 3600 IN AAAA 2606:50c0:8002::153 > EXAMPLE.COM 3600 IN AAAA 2606:50c0:8003::153
- 增加
CNAME
记录,Host为www
, 对应的地址为 “username.github.io.”
重要提示
- 刷新DNS配置页面,确定所有DNS记录都添加成功;
- CNAME记录中使用自己的GitHub账户的username,并且注意结尾还有一个点;
- 最重要的(原因我也不清楚) 这里的CNAME指向的地址和之前的个人站点的域名配置相同都是指向
username.github.io
而不是指向username.github.io/<project name>
如果配置到对应的项目地址就错了!
Step 3: 在GitHub中关联域名
在GitHub的站点Repo的settings页面中,选择 Pages
, 在GitHub Pages页面中的 Custom domain
中填入域名,并保存。
Step 4: 等待
接下来就是等待了,将DNS配置更新到global server估计需要24小时,有的服务商慢的会到48小时,快的话几个小时就差不多了,这个过程就需要漫长的等待了,一开始我总以为这种方法不成功,实际上多等会儿,DNS配置更新成功后就可以了。 Go for a walk, or have a Zoom date if you’re in COVID lockdown.
Step 5: 开启 HTTPS
域名配置好之后,仍然在上述的页面中选择 Enforce HTTPS
强制开启HTTPS,实际上在上述的等待过程中,GitHub会自动完成签名,所以GitHub可以免费支持HTTPS。
刷新页面,地址就显示成 https
了,所以得就配置完成了。
最后这里还有一个值得注意的地方,如果在地址栏中直接使用原始的 https://username.github.io
在配置第二个站点前是自动跳转到第一个域名对应的站点,配置了第二个站点后会跳转第二个域名对应的站点,所以我猜测是指向最后添加的域名地址。