拥有仓库管理员权限的人可为 GitHub Pages 站点配置自定义域。
关于自定义域配置
提示:**** 建议在将自定义域添加到存储库之前先对其进行验证,以提高安全性并避免接管攻击。 有关详细信息,请参阅“验证 GitHub Pages 的自定义域”。
使用 DNS 提供程序配置自定义域之前,请确保将自定义域添加到您的 GitHub Pages 站点。 使用 DNS 提供程序配置自定义域而不将其添加到 GitHub,可能导致其他人能够在您的某个子域上托管站点。
dig
命令可用于验证 DNS 记录的配置是否正确,它未包含在 Windows 中。 要验证 DNS 记录是否已正确配置,可以使用 Resolve-DnsName
PowerShell 命令或安装 BIND。
注意:传播 DNS 更改可能需要长达 24 小时的时间。
配置 apex 域
要设置顶点域(例如 example.com
),必须在存储库设置中配置自定义域,并使用 DNS 提供程序配置至少一个 ALIAS
、ANAME
或 A
记录。
-
在 GitHub 上,导航到站点的仓库。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。
-
在边栏的“代码和自动化”部分中,单击“ Pages”。
-
在“自定义域”下,键入自定义域,然后单击“保存”。 如果从分支发布站点,会创建一个提交,将
CNAME
直接文件添加到源分支的根目录。 如果使用自定义 GitHub Actions 工作流发布网站,则不会创建任何CNAME
文件,因此需要手动创建一个(仅包含自定义域的文本行)。 有关发布源的详细信息,请参阅“配置 GitHub Pages 站点的发布源”。 -
导航到 DNS 提供程序并创建一条
ALIAS
、ANAME
或A
记录。 还可以为 IPv6 支持创建AAAA
记录。 如果要实现 IPv6 支持,我们强烈建议在AAAA
记录之外使用A
记录,因为 IPv6 的全局采用速度缓慢。 有关如何创建正确记录的更多信息,请参阅 DNS 提供程序的文档。-
要创建
ALIAS
或ANAME
记录,请将顶点域指向站点的默认域。 有关站点的默认域的详细信息,请参阅“关于 GitHub Pages”。 -
要创建
A
记录,请将顶点域指向 GitHub Pages 的 IP 地址。185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153
-
要创建
AAAA
记录,请将顶点域指向 GitHub Pages 的 IP 地址。2606:50c0:8000::153 2606:50c0:8001::153 2606:50c0:8002::153 2606:50c0:8003::153
警告:我们强烈建议勿使用通配符 DNS 记录,例如
*.example.com
。 即使验证域,这些记录也会立即面临域接管风险。 例如,如果验证example.com
,这会阻止某人使用a.example.com
,但他们仍可以接管b.a.example.com
(由通配符 DNS 记录所涵盖)。 有关详细信息,请参阅“验证 GitHub Pages 的自定义域”。 -
-
打开终端终端Git Bash。
-
要确认 DNS 记录配置正确,请使用
dig
命令,将 EXAMPLE.COM 替换为顶点域。 确认结果与上面 GitHub Pages 的 IP 地址相匹配。-
适用于
A
记录:$ 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
-
适用于
AAAA
记录:$ 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
请记住还要检查
A
记录。
-
-
如果你使用静态站点生成器在本地构建站点并将生成的文件推送到 GitHub,请将添加 CNAME 文件的提交拉取到本地存储库。 有关详细信息,请参阅“自定义域和 GitHub Pages 疑难解答”。
-
(可选)若要为站点强制实施 HTTPS 加密,请选择“强制实施 HTTPS”。 可能要过 24 小时才能使用此选项。 有关详细信息,请参阅“使用 HTTPS 保护 GitHub Pages 站点”。
配置顶点域和 www
子域变体
注意:**** 建议为 HTTPS 安全网站设置 www
子域以及顶点域。
如果使用 apex 域作为自定义域名,建议还设置一个 www
子域。 如果通过 DNS 提供程序配置每种域类型的正确记录,GitHub Pages 将自动在域之间创建重定向。 例如,如果将 www.example.com
配置为站点的自定义域,并且为顶点和 www
域设置了 GitHub Pages DNS 记录,则 example.com
将重定向到 www.example.com
。 请注意,自动重定向仅适用于 www
子域。 自动重定向不适用于任何其他子域,如 blog
。 有关详细信息,请参阅“配置子域”。
导航到 DNS 提供程序并为指向 GitHub Pages 默认域的 www
子域创建一条 CNAME
记录。 例如,假设网站位于 <user>.github.io
,则应创建一条将 www.example.com
指向 <user>.github.io
的 CNAME
记录。同样,对于位于 <organization>.github.io
的组织网站,应创建一条将 www.example.com
指向 <organization>.github.io
的 CNAME
记录。 确保 CNAME
记录直接指向 <user>.github.io
或 <organization>.github.io
,而不包含存储库名称。
有关如何创建正确记录的更多信息,请参阅 DNS 提供程序的文档。 有关站点的默认域的详细信息,请参阅“关于 GitHub Pages”。
配置子域
要设置 www
或自定义子域(例如 www.example.com
或 blog.example.com
),必须在存储库设置中添加你的域。 然后,通过 DNS 提供商配置 CNAME 记录。
-
在 GitHub 上,导航到站点的仓库。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。
-
在边栏的“代码和自动化”部分中,单击“ Pages”。
-
在“自定义域”下,键入自定义域,然后单击“保存”。 如果从分支发布站点,会创建一个提交,将
CNAME
直接文件添加到源分支的根目录。 如果使用自定义 GitHub Actions 工作流发布网站,则不会创建任何CNAME
文件,因此需要手动创建一个(仅包含自定义域的文本行)。 有关发布源的详细信息,请参阅“配置 GitHub Pages 站点的发布源”。注意:如果自定义域是国际化域名,则必须输入 Punycode 编码版本。
有关 Punycodes 的详细信息,请参阅国际化域名。
-
导航到 DNS 提供程序并创建
CNAME
记录,使子域指向站点的默认域。 例如,如果要使用子域www.example.com
作为你的用户站点,请创建将www.example.com
指向<user>.github.io
的CNAME
记录。 如果要使用子域another.example.com
作为你的组织站点,请创建将another.example.com
指向<organization>.github.io
的CNAME
记录。CNAME
记录应始终指向<user>.github.io
或<organization>.github.io
,排除存储库名称。 有关如何创建正确记录的更多信息,请参阅 DNS 提供程序的文档。 有关站点的默认域的详细信息,请参阅“关于 GitHub Pages”。警告:我们强烈建议勿使用通配符 DNS 记录,例如
*.example.com
。 即使验证域,这些记录也会立即面临域接管风险。 例如,如果验证example.com
,这会阻止某人使用a.example.com
,但他们仍可以接管b.a.example.com
(由通配符 DNS 记录所涵盖)。 有关详细信息,请参阅“验证 GitHub Pages 的自定义域”。 -
打开终端终端Git Bash。
-
要确认 DNS 记录配置正确,请使用
dig
命令,将 WWW.EXAMPLE.COM 替换为子域。$ dig WWW.EXAMPLE.COM +nostats +nocomments +nocmd > ;WWW.EXAMPLE.COM. IN A > WWW.EXAMPLE.COM. 3592 IN CNAME YOUR-USERNAME.github.io. > YOUR-USERNAME.github.io. 43192 IN CNAME GITHUB-PAGES-SERVER . > GITHUB-PAGES-SERVER . 22 IN A 192.0.2.1
-
如果你使用静态站点生成器在本地构建站点并将生成的文件推送到 GitHub,请将添加 CNAME 文件的提交拉取到本地存储库。 有关详细信息,请参阅“自定义域和 GitHub Pages 疑难解答”。
-
(可选)若要为站点强制实施 HTTPS 加密,请选择“强制实施 HTTPS”。 可能要过 24 小时才能使用此选项。 有关详细信息,请参阅“使用 HTTPS 保护 GitHub Pages 站点”。
注意:**** 如果将自定义子域指向顶点域,将会遇到对网站强制实施 HTTPS 的问题,此外还可能会遇到子域根本无法访问 GitHub Pages 网站的问题。
自定义域的 DNS 记录
如果熟悉为 GitHub Pages 站点配置域的过程,可以使用下表查找特定情形的 DNS 值以及 DNS 提供商支持的 DNS 记录类型。 有关详细信息,包括如何在 GitHub 上配置 GitHub Pages 站点,以及如何使用 dig
命令验证配置,请参阅上述章节。
若要配置根域,只需从下表中选择单个 DNS 记录类型即可。 若要配置根域和 www
子域(例如 example.com
和 www.example.com
),请先配置根域,然后配置子域。 有关详细信息,请参阅“配置根域和 www
子域变体”
警告:我们强烈建议勿使用通配符 DNS 记录,例如 *.example.com
。 即使验证域,这些记录也会立即面临域接管风险。 例如,如果验证 example.com
,这会阻止某人使用 a.example.com
,但他们仍可以接管 b.a.example.com
(由通配符 DNS 记录所涵盖)。 有关详细信息,请参阅“验证 GitHub Pages 的自定义域”。
场景 | DNS 记录类型 | DNS 记录名称 | DNS 记录值 |
---|---|---|---|
Apex 域 ( example.com ) | A | @ | 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 |
Apex 域 ( example.com ) | AAAA | @ | 2606:50c0:8000::153 2606:50c0:8001::153 2606:50c0:8002::153 2606:50c0:8003::153 |
Apex 域 ( example.com ) | ALIAS 或 ANAME | @ | USERNAME.github.io 或ORGANIZATION.github.io |
子域 ( www.example.com 、blog.example.com ) | CNAME | SUBDOMAIN | USERNAME.github.io 或ORGANIZATION.github.io |
删除自定义域
如果收到有关自定义域被占用的错误,则可能需要从另一个存储库中删除该自定义域。
-
在 GitHub 上,导航到站点的仓库。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。
-
在边栏的“代码和自动化”部分中,单击“ Pages”。
-
在“自定义域”下,单击“删除”。
保护自定义域
如果 GitHub Pages 站点已禁用,但设置了自定义域,则存在域接管的风险。 在您的网站被禁用时拥有通过 DNS 提供商配置的自定义域,可能会导致其他人在您的一个子域上托管网站。
验证自定义域可防止其他 GitHub 用户将你的域用于他们的存储库。 如果你的域未经过验证,并且 GitHub Pages 站点已禁用,则应立即通过 DNS 提供商更新或删除 DNS 记录。 有关详细信息,请参阅“验证 GitHub Pages 的自定义域”。