Brian's Blog | 布莱恩部落

With the Code, Change the World !

混迹于互联网的一名iOS杂工
初窥门径的技术管理者
App,音视频,直播,记录思考点滴 ~


Github托管多个网站使用不同域名

给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 1

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.”

Step 2

重要提示

  • 刷新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 3

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。

Step 4

刷新页面,地址就显示成 https 了,所以得就配置完成了。

最后这里还有一个值得注意的地方,如果在地址栏中直接使用原始的 https://username.github.io 在配置第二个站点前是自动跳转到第一个域名对应的站点,配置了第二个站点后会跳转第二个域名对应的站点,所以我猜测是指向最后添加的域名地址。

更早的文章

Welcome to Jekyll!

You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-r...…

继续阅读