這篇博客將整理在配置博客以及項目 Pages 的自定義域名過程,遇到的問題以及解決方法。Github 的文檔對于如何配置自定義域名有詳細的介紹,這里不會全部翻譯,只重點記錄實踐的過程,內容涉及為用戶網(wǎng)站,公司網(wǎng)站,以及項目網(wǎng)站添加 Apex 域名(qiwihui.com),二級域名(www.qiwihui.com)以及開啟 HTTPS。最后,所有指向 www.qiwihui.com 的請求將會被重定向至 https://qiwihui.com。
一些注意
Github 支持的自定義域名類型
| 支持的自定義域名類型 | 域名例子 |
|---|---|
| www subdomain | www.example.com |
| one apex domain & one www subdomain |
example.com & www.example.com
|
| apex domain | example.com |
| custom subdomain | blog.example.com |
GitHub Pages 站支持的域名
| GitHub Pages 站類型 | 在 Github 上 Pages 的默認域名和主機地址 | 頁面被如何重定向 | 自定義域名舉例 |
|---|---|---|---|
| User Pages 站 | username.github.io |
自動重定向到設置的自定義域名 | user.example.com |
| Organization Pages 站 | orgname.github.io |
自動重定向到設置的自定義域名 | org.example.com |
| 用戶擁有的 Project Pages 站 | username.github.io/projectname |
自動重定向到 User Pages 站自定義域名的子目錄(user.example.com/projectname) |
project.example.com |
| 公司擁有的 Project Pages 站 | orgname.github.io/projectname |
自動重定向到 Organization Pages 站自定義域名的子目錄(org.example.com/projectname) |
project.example.com |
以個人 Pages 項目為例子
開啟 Github Pages 功能
在項目 Settings 中,找到 GitHub Pages 這一區(qū)域,選擇 Source 為對應的要部署的分支,這里我選擇 gh-pages branch:

其中,選擇 master branch 會視 /README.md 為 web 的 index.html,選擇 master branch /docs folder 會視 /docs/README.md 為 web 的 index.html。
在項目配置中自定義域名
在 Custom domain 中添加自己的域名并保存:

或者,在項目分支中添加 CNAME 文件,CNAME 文件的內容為
qiwihui.com
這里推薦第二種,尤其對于有設置 CI 的項目,因為 CI 上將第一種設置覆蓋。
這一步是比較重要卻又容易忽視的一步:
- 如果添加到 GitHub Pages 中的是
qiwihui.com,那么www.qiwihui.com會被重定向到qiwihui.com; - 如果添加到 GitHub Pages 中的是
www.qiwihui.com,那么qiwihui.com會被重定向到www.qiwihui.com;
這里我選擇重定向到 www.qiwihui.com,所以設置為 qiwihui.com
添加 DNS 記錄
為了能設置Apex 域名,需要在 DNS 中配置 A 記錄指向 github 的 IP:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

同時,設置 CNAME 記錄將 www.qiwihui.com 指向 qiwihui.github.io,即 <你的 github 用戶名>.github.io。對于公司來說,這個地址是 <公司名稱>.github.io。

確認 DNS 記錄
以下是設置好之后的 DNS 記錄情況:
$ dig +noall +answer qiwihui.com
qiwihui.com. 60 IN A 185.199.111.153
qiwihui.com. 60 IN A 185.199.110.153
qiwihui.com. 60 IN A 185.199.108.153
qiwihui.com. 60 IN A 185.199.109.153
$ dig www.qiwihui.com +nostats +nocomments +nocmd
; <<>> DiG 9.10.6 <<>> www.qiwihui.com +nostats +nocomments +nocmd
;; global options: +cmd
;www.qiwihui.com. IN A
www.qiwihui.com. 28 IN CNAME qiwihui.github.io.
qiwihui.github.io. 28 IN A 185.199.110.153
qiwihui.github.io. 28 IN A 185.199.108.153
qiwihui.github.io. 28 IN A 185.199.111.153
qiwihui.github.io. 28 IN A 185.199.109.153
SSL(HTTPS)配置,強烈推薦開啟
勾選 Enforce HTTPS

Github 會自動保持 HTTPS 證書的有效。
項目 Pages
當給項目設置 Pages 時,一般都已經(jīng)有一個個人或者公司的 Pages 了,如果沒有,就可以按以上的過程添加。如果已經(jīng)設置了,則只需要很簡單的兩步即可:
以下以個人項目 [qiwihui/fullstackpython.com](https://github.com/qiwihui/fullstackpython.com),設置地址為 fullstackpython.qiwihui.com
- 在項目中開啟 Github Pages,并添加
CNAME文件指向fullstackpython.qiwihui.com:

- 在 DNS 記錄中添加 CNAME 記錄將
fullstackpython.qiwihui.com指向qiwihui.github.io,即<你的 github 用戶名>.github.io。對于公司來說,這個地址是<公司名稱>.github.io。

一段時間后即可。