前言
Github Page 是 Github 提供的一个可以从 Github 仓库上托管静态网站的功能服务。默认当你建立起一个仓库后,在对应会有一个可供浏览的静态网站,例如 https://eternaldeath.github.io/BlockchainHome/
,其中,eternaldeath 是我的 Github 账户名字,BlockchainHome 是我的某个仓库名字。
然而很多时候我们希望能够使用自己的域名来替代默认的域名,以体现出自身网站的风格,而 Github Page 也提供了这种域名映射的能力,可以将自定义域名更换为自己的域名。
虽然 Github Doc 提供了指导文档,但该文档书写的不够友好,不适合新人阅读。
购买域名
购买域名一般分为两种情况,一种是希望国内能够访问的,一种是国外能够访问的。国内的域名购买和使用比较麻烦,因为需要进行备案等认证操作,通常需要好几天的时间,而国外的主流域名服务提供商不需要备案,购买和部署流程只需要几个小时即可完成。
同时,由于 Github Page 是托管在国外的服务器上,因此即使使用国内购买的域名也无法完成映射。
在本例中,我选择从 GoDaddy 上购买域名,你也可以选择各种主流的域名服务提供商进行购买,这里贴一些可提供支付宝支付的平台,如,GoDaddy,Dynadot,Porkbun,NameSilo 等。购买的时候也有注意事项,就是选择主流大平台进行购买。
具体的购买细节就不在这里展示了。
验证自定义域名
Github 提供了验证自定义域名的功能,该功能可以防止恶意对手发起域名劫持一类的攻击。所以首先我们先完成对你的域名的验证。
第一步,在任意 Github 页面点击右上角头像
第二步,在弹出的下拉框中,点击 Settings
第三步,在左侧栏找到 code,planning,and automation
,并点击其中的 Pages
选项
第四步,在右侧输入要验证的域名(如 aiproducthome.top),并点击 Add domain
按钮
然后你会获得如下的记录,并继续按照该记录所示的步骤进行验证
接记录所需验证步骤,第五步,进入你购买域名网站,并进入你的域名的管理界面,虽然不同的域名服务提供商相关的界面不同,但大体它们的组成是相同。
这里以 GoDaddy 为例,进入到我的域名的 DNS 管理界面,并选择添加新的 DNS 记录(DNS records)。
在记录中,Type 选择为 TXT 类型(更多类型,参考“记录类型”小节),Name 为第四步中的 hostname,即 _github-pages 开头的内容,Value 是第四步中的 code,它是一串数字和英文组成的字符串。而 TTL 值选择默认即可。
最后点击 Save
按钮。
当上述内容配置好后,返回第四步的验证页面,点击 Verify
按钮。虽然理论上说的是需要 24 小时才可能验证成功,实际上不出意外,进需要几分钟即可完成验证。
映射自定义域名
第一步,还是在你的域名服务提供商的管理网页中,配置 A 记录类型,该类型用于将域名(例如,aiproducthome.top)指向 IP 地址。
还是点击 Add New Record
。然后在弹出的配置框中进行配置,其中 Type 选择 A,Name 填写 @,Value 填写四个由 Github 提供的 IP 地址(这四个 IP 地址大家都一样,具体见 Github 官方文档),如下所示。TTL 默认,最后点击 Save
按钮。
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
第二步,将子域名指向 IP 地址。
这里简单介绍一下 apex 域名和子域名,例如 aiproducthome.top 是 apex 域名,apex 就是顶级的意思,也就是顶级域名。而 www.aiproducthome.top 或 blog.aiproducthome.top 都被成为子域名,它们都属于 aiproducthome.top 域下的。
在第一步中我们其实配置的就是 apex 域名,而下面我们可以配置一些子域名,例如常见的 www 域名。
方法类似,同样是点击 Add New Record
,然后 Type 选择 CNAME(含义见记录类型小节),Name 填写 www,Value 填写 <username>.github.io
,TTL 默认即可。最后Save
按钮。
到此,在域名服务商部分需要进行的 DNS 配置就完成了,上述内容需要花费一点时间在网络的各个 DNS 服务器上进行传播,接着我们回到 Github 进行相应的配置。
第三步,进入你的仓库界面,并点击上方的 Settings
按钮。在左侧栏的 Code and automation 部分,点击 Pages 选项,在右侧的栏目中,将你的顶级域名(例如 aiproducthome.top)填写进去并点击Save
按钮。
Github Page 将花费一点时间完成对 DNS 配置的检查。
回到同一页面的最上方,你会发现 Your site is live at 后面的部分变成了你的自定义域名。
至此,所有的任务就完成了,你可以通过顶级域名,子域名(www)或者之前的 github.io 的域名来访问,所有的内容都会跳转到自定义域名上。
记录类型
在前述的步骤中,我们在对域名的 DNS 配置中使用到了多种记录类型,这里简单阐述一下不同记录类型的作用。
类型 | 作用 |
---|---|
A(Address Record) | 将域名映射到 IPv4 地址,例如,将 www.example.com 映射到 192.168.1.1 |
AAAA(IPv6 Address Record) | 将域名映射到 IPv6 地址 |
CNAME(Canonical Name Record) | 域名别名映射到域名,例如,将 eternaldeath.github.io 映射到 aiproducthome.top |
注意点
特别注意的是,由于你配置了新的域名,那么部分静态网站可能在加载资源的时候会找不到资源。例如,我使用 hexo 部署了静态网站,在_config.yml
中配置的是默认的域名(即 github.io),因此为了重新加载资源,你需要配置成你现在的域名。具体可以借鉴我的这篇博客《【教程】hexo 更换主题后,部署在 Github Page 无 CSS 样式》。
参考
- Configure a custom domain
- DNS record types【Cloudflare】