跳到主要内容

管理 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 提供商配置自定义域,则其他人可能会在您的某个子域上托管网站。

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

注意:DNS 更改最多可能需要 24 小时才能传播。

配置顶级域

若要设置顶级域(例如 example.com),您必须在存储库设置中配置自定义域,并在 DNS 提供商处配置至少一条 ALIASANAMEA 记录。

  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 提供商并创建一个 ALIASANAMEA 记录。您还可以创建 AAAA 记录以支持 IPv6。如果您要实施 IPv6 支持,我们强烈建议在 AAAA 记录之外使用一个 A 记录,因为 IPv6 在全球范围内采用缓慢。有关如何创建正确记录的更多信息,请参阅您的 DNS 提供商的文档。

    • 要创建一个 ALIASANAME 记录,将您的顶级域名指向您网站的默认域名。有关您网站的默认域名的更多信息,请参阅“关于 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 子域变体

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

如果你将顶级域用作你的自定义域,我们建议同时设置一个 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,您应该创建一个 CNAME 记录,将 www.example.com 指向 <user>.github.io 同样,对于位于 <organization>.github.io 的组织网站,您应该创建一个 CNAME 记录,将 www.example.com 指向 <organization>.github.io。确保 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,请创建一个 CNAME 记录,将 www.example.com 指向 <user>.github.io。如果您想为您的组织网站使用子域名 another.example.com,请创建一个 CNAME 记录,将 another.example.com 指向 <organization>.github.ioCNAME 记录应始终指向 <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 自定义域名”。

延伸阅读