跳至主要内容

管理 GitHub Pages 网站的自定义域名

您可以设置或更新某些 DNS 记录和您的仓库设置,以将 GitHub Pages 网站的默认域名指向自定义域名。

谁可以使用此功能?

GitHub Pages 可用于使用 GitHub Free 和 GitHub Free for organizations 的公共仓库,以及使用 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有仓库。有关更多信息,请参阅“GitHub 的计划”。

从 2024 年 6 月 30 日起,所有 GitHub Pages 构建都将使用 GitHub Actions。无需进行其他更改,但必须在您的仓库中启用 GitHub Actions 才能继续构建。有关启用 GitHub Actions 的更多信息,请参阅“管理仓库的 GitHub Actions 设置”。

平台导航

具有仓库管理员权限的人员可以为 GitHub Pages 网站配置自定义域名。

关于自定义域名配置

提示: 我们建议您在将自定义域名添加到您的仓库之前验证它,以提高安全性并避免接管攻击。有关更多信息,请参阅“验证您的 GitHub Pages 自定义域名”。

请确保您在使用 DNS 提供商配置自定义域名之前,将自定义域名添加到您的 GitHub Pages 网站。在将自定义域名添加到 GitHub 之前使用 DNS 提供商配置自定义域名可能会导致其他人能够在您的子域名之一上托管网站。

dig 命令可用于验证 DNS 记录的正确配置,但 Windows 中不包含该命令。要验证您的 DNS 记录是否已正确配置,您可以使用 Resolve-DnsName PowerShell 命令或安装 BIND

注意: DNS 更改可能需要长达 24 小时才能生效。

配置顶层域名

要设置顶层域名(例如 example.com),您必须在您的仓库设置中配置一个自定义域名,以及至少一个 ALIASANAMEA 记录,这些记录与您的 DNS 提供商相关联。

  1. 在 GitHub 上,导航到您的网站的仓库。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择 下拉菜单,然后单击 设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,点击 ** 页面**。

  4. 在“自定义域名”下,输入您的自定义域名,然后点击 **保存**。如果您从分支发布网站,这将创建一个提交,将一个 `CNAME` 文件直接添加到源分支的根目录。如果您使用自定义 GitHub Actions 工作流发布网站,则不会创建 `CNAME` 文件,因此您需要手动创建一个(其中只包含一行包含您的自定义域名的文本)。有关发布源的更多信息,请参阅“配置 GitHub Pages 网站的发布源”。

  5. 导航到您的 DNS 提供商并创建一个 `ALIAS`、`ANAME` 或 `A` 记录。您也可以创建 `AAAA` 记录以支持 IPv6。如果您正在实施 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 自定义域名”。

  6. 打开 终端终端Git Bash

  7. 要确认您的 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 记录。

  8. 如果您使用静态网站生成器在本地构建您的网站并将生成的 文件推送到 GitHub,请将添加 CNAME 文件的提交拉取到您的本地 存储库。有关更多信息,请参阅“自定义域和 GitHub Pages 故障排除”。

  9. 可选地,要为您的网站强制执行 HTTPS 加密,请选择 **强制执行 HTTPS**。此选项可能需要长达 24 小时才能生效。有关更多信息,请参阅“使用 HTTPS 保护您的 GitHub Pages 网站”。

配置顶层域和www 子域变体

注意:建议在顶层域旁边设置www 子域,以用于 HTTPS 安全网站。

如果您使用顶层域作为您的自定义域,我们建议您也设置一个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.ioCNAME 记录。类似地,对于位于 <organization>.github.io 的组织网站,您应该创建一个将 www.example.com 指向 <organization>.github.ioCNAME 记录。确保 CNAME 记录直接指向 <user>.github.io<organization>.github.io,不包括仓库名称。

有关如何创建正确记录的更多信息,请参阅您的 DNS 提供商的文档。有关您网站的默认域的更多信息,请参阅“关于 GitHub Pages”。

配置子域

要设置 www 或自定义子域,例如 www.example.comblog.example.com,您必须在仓库设置中添加您的域。之后,使用您的 DNS 提供商配置 CNAME 记录。

  1. 在 GitHub 上,导航到您的网站的仓库。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择 下拉菜单,然后单击 设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,点击 ** 页面**。

  4. 在“自定义域名”下,输入您的自定义域名,然后点击 **保存**。如果您从分支发布网站,这将创建一个提交,将一个 `CNAME` 文件直接添加到源分支的根目录。如果您使用自定义 GitHub Actions 工作流发布网站,则不会创建 `CNAME` 文件,因此您需要手动创建一个(其中只包含一行包含您的自定义域名的文本)。有关发布源的更多信息,请参阅“配置 GitHub Pages 网站的发布源”。

    注意:如果您的自定义域是国际化域名,您必须输入其 Punycode 编码版本。

    有关 Punycode 的更多信息,请参阅 国际化域名

  5. 导航到您的 DNS 提供商并创建一个将您的子域指向您网站的默认域的 CNAME 记录。例如,如果您想将 www.example.com 子域用于您的用户网站,请创建一个将 www.example.com 指向 <user>.github.ioCNAME 记录。如果您想将 another.example.com 子域用于您的组织网站,请创建一个将 another.example.com 指向 <organization>.github.ioCNAME 记录。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 自定义域名”。

  6. 打开 终端终端Git Bash

  7. 要确认您的 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
    
  8. 如果您使用静态网站生成器在本地构建您的网站并将生成的 文件推送到 GitHub,请将添加 CNAME 文件的提交拉取到您的本地 存储库。有关更多信息,请参阅“自定义域和 GitHub Pages 故障排除”。

  9. 可选地,要为您的网站强制执行 HTTPS 加密,请选择 **强制执行 HTTPS**。此选项可能需要长达 24 小时才能生效。有关更多信息,请参阅“使用 HTTPS 保护您的 GitHub Pages 网站”。

    注意:如果您将您的自定义子域指向您的顶层域,您将遇到对您的网站强制 HTTPS 的问题,并且您可能会遇到您的子域根本无法访问您的 GitHub Pages 网站的问题。

您的自定义域的 DNS 记录

如果您熟悉为 GitHub Pages 网站配置域的过程,您可以使用下表查找特定场景的 DNS 值以及您的 DNS 提供商支持的 DNS 记录类型。有关更多信息,包括如何在 GitHub 上配置您的 GitHub Pages 网站以及如何使用 dig 命令验证配置,请参阅上面的部分。

要配置顶层域,您只需要从下表中选择一种 DNS 记录类型。要配置顶层域和 www 子域(例如,example.comwww.example.com),请先配置顶层域,然后再配置子域。有关更多信息,请参阅“配置顶层域和 www 子域变体”。

**警告:**我们强烈建议您不要使用通配符 DNS 记录,例如 `*.example.com`。这些记录会让您立即面临域名被接管的风险,即使您验证了域名。例如,如果您验证了 `example.com`,这将阻止其他人使用 `a.example.com`,但他们仍然可以接管 `b.a.example.com`(它由通配符 DNS 记录覆盖)。有关更多信息,请参阅“验证您的 GitHub Pages 自定义域名”。

场景DNS 记录类型DNS 记录名称DNS 记录值
顶层域名
(example.com)
A@185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
顶层域名
(example.com)
AAAA@2606:50c0:8000::153
2606:50c0:8001::153
2606:50c0:8002::153
2606:50c0:8003::153
顶层域名
(example.com)
ALIASANAME@USERNAME.github.io
ORGANIZATION.github.io
子域名
(ww​w.example.com,
blog.example.com)
CNAMESUBDOMAINUSERNAME.github.io
ORGANIZATION.github.io

删除自定义域名

如果您收到有关自定义域名已被占用的错误,您可能需要从另一个仓库中删除自定义域名。

  1. 在 GitHub 上,导航到您的网站的仓库。

  2. 在您的仓库名称下,单击 设置。如果您看不到“设置”选项卡,请选择 下拉菜单,然后单击 设置

    Screenshot of a repository header showing the tabs. The "Settings" tab is highlighted by a dark orange outline.

  3. 在侧边栏的“代码和自动化”部分,点击 ** 页面**。

  4. 在“自定义域名”下,单击**删除**。

    Screenshot of a settings box to save or remove a custom domain on GitHub Pages . To the right of a text box reading "example.com" is a button labeled "Remove" in red type.

保护您的自定义域名

如果您的 GitHub Pages 网站被禁用,但已设置自定义域名,则该网站有被域名接管的风险。在您的网站被禁用时,将自定义域名配置到您的 DNS 提供商可能会导致其他人托管您子域名的网站。

验证您的自定义域名可以防止其他 GitHub 用户使用您的域名与其仓库关联。如果您的域名未经验证,并且您的 GitHub Pages 网站被禁用,您应立即更新或删除您与 DNS 提供商的 DNS 记录。有关更多信息,请参阅“验证您的 GitHub Pages 自定义域名”。

进一步阅读