【问题标题】:Custom domain for GitHub project pagesGitHub 项目页面的自定义域
【发布时间】:2012-02-23 08:19:13
【问题描述】:

我的http://github.com 存储库之一中有一个gh-pages 分支。如果我转到http://myuser.github.com/myrepo,GitHub 项目页面可以正常工作

我想设置一个自定义域 (myexample.com) 来提供此项目页面。我希望 myexample.comwww.myexample.com 提供这些项目页面。

GitHub pages help 表示在您的 DNS 中创建 A 记录和 CNAME 记录。 A 记录有意义,但我不知道在我的 DNS 中创建什么 CNAME 记录。

gh-pages 文档说要为用户页面存储库“charlie.github.com”创建CNAME 记录。我没有用户页面存储库 - 我只有一个项目存储库和一个 gh-pages 分支,我想将它们用于 myexample.comwww.myexample.com

我是否需要创建一个用户页面存储库,以便将我的项目页面用于 www.myexample.com 和 myexample.com?

我只是尝试一下,但我想确保这能正常工作,因为我已经拥有 www.myexample.com 并且不想犯错误。

我向 GitHub 支持部门发送了电子邮件,他们的回复是

据我所知,您不能同时指向相同的 gh 页面。

我很难相信他们只支持项目页面的 A 记录。

以前有人成功过吗?

【问题讨论】:

  • 我设置了lacewing-project.org,只有一条指向 207.97.227.245 的 A 记录(没有 CNAME 记录),它工作正常。我还在包含域名的 gh-pages 分支的根目录中放置了一个名为 CNAME 的文件。
  • 就我而言,只需将 CNAME 文件放在 gh-pages 分支中就可以了,谢谢!

标签: github dns


【解决方案1】:

19 年 1 月 23 日更新:

自从我上次回答以来,情况发生了很大变化(变得更好)。这个更新的答案将向您展示如何配置:

  1. 根顶点 (example.com)
  2. 子域 (www.example.com)
  3. HTTPS(可选但强烈建议)

最后,所有对example.com 的请求都将被重定向到https://www.example.com(如果您选择不使用HTTPS,则为http://)。我总是使用www 作为我的最终着陆点。为什么(1,2),还有待讨论。

这个答案很长,但并不复杂。为了清楚起见,我很冗长,因为关于这个主题的 GitHub 文档不清晰或线性。

第 1 步:在 GitHub 设置中启用 GitHub 页面

  1. 在您的存储库中,单击 选项卡
  2. 向下滚动到GitHub Pages 部分。你有两个选择:
  3. 选择master branch 会将/README.md 视为您的网络index.html。选择master branch /docs folder 会将/docs/README.md 视为您的网络index.html
  4. 选择一个主题。
  5. 等待 GitHub 发布您的网站。通过单击Your site is ready to be published at 旁边的链接验证它是否有效

第 2 步:在 GitHub 设置中指定自定义域

在此处输入您的自定义域名并点击save

这是一个微妙但重要的步骤。

  • 如果您添加到 GitHub Pages 站点的自定义域是 example.com,那么 www.example.com 将重定向到 example.com
  • 如果您添加到 GitHub Pages 站点的自定义域是 www.example.com,则 example.com 将重定向到 www.example.com

如前所述,我建议始终登陆www,因此我输入了www.example.com,如上图所示。

第 3 步:创建 DNS 条目

在您的 DNS 提供商的 Web 控制台中,创建四个 A 记录和一个 CNAME

  1. A@(又名根顶点)的记录:

一些 DNS 提供商会让您指定 @,而其他(如 AWS Route 53)您将通过 leave the sub-domain blank 指定 @。无论哪种情况,these 都是要创建的 A 记录:

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

Check the Github docs 确认这些是最新的 IP。

  1. 创建CNAME 记录以将www.example.com 指向YOUR-GITHUB-USERNAME.github.io

这是最令人困惑的部分。

注意YOUR-GITHUB-USERNAME 不是 GitHub 存储库名称! YOUR-GITHUB-USERNAME 的值由this chart 决定。

对于用户页面网站(很可能是您),CNAME 条目将是 username.github.io,例如:

对于组织页面网站,CNAME 条目将为 orgname.github.io,例如:

第 5 步:确认 DNS 条目

  1. 通过运行dig +noall +answer example.com 确认您的A 记录。它应该返回您输入的四个185.x.x.x IP 地址。

  2. 通过运行dig www.example.com +nostats +nocomments +nocmd 确认您的CNAME 记录。它应该返回一个CNAME YOUR-GITHUB-USERNAME.github.io

解析/传播这些 DNS 条目可能需要一个小时左右的时间。一旦他们这样做了,打开你的浏览器到http://example.com,它应该重定向到http://www.example.com

第 6 步:SSL (HTTPS) 配置。可选,但强烈推荐

自定义域正常工作后,返回到 repo 设置。如果您已经打开了设置页面,请硬刷新页面。

如果Enforce HTTPS 复选框下方有一条消息,说明它仍在处理中,您需要等待。您可能还需要点击Custom domain 部分中的save 按钮来启动Enforce HTTPS 处理。

处理完成后,应如下所示:

只需单击Enforce HTTPS 复选框,然后将浏览器指向https://example.com。它应该重定向并打开https://www.example.com

就是这样!

GitHub 将自动使您的 HTTPS 证书保持最新,并且应该通过 HTTPS 处理指向 www 重定向的顶点。

希望这会有所帮助!

【讨论】:

  • 截至 2012 年 4 月 19 日,GitHub's documentation 使用 204.232.175.78 作为 IP 地址。
  • 检查 2014 年 2 月 6 日和 github 文档说:创建指向以下 IP 地址的 DNS A 记录:192.30.252.153、192.30.252.154。
  • “如果您使用指向 207.97.227.245 或 204.232.175.78 的 A 记录,您将需要更新您的 DNS 设置,因为我们不再直接从这些服务器提供页面。” help.github.com/articles/my-custom-domain-isn-t-working - 2014 年 3 月 8 日
  • 我认为不可能从裸 @ 域设置 CNAME 记录。这就是为什么您需要 A 记录来处理从裸域到 www 子域的重定向。这是任何云主机的问题。不保证固定 IP。
  • @rynop GoDaddy 不允许 @ 和 www 到 yourusername.github.io,每个子域只有一个 CNAME 记录:(
【解决方案2】:

概述

对于项目页面documentation 有点令人困惑,而不是用户页面。感觉应该做的更多,其实过程很简单。

涉及到:

  1. 为裸(无 www)域设置 2 个静态 A 记录。
  2. 为 www 创建一条 CNAME 记录,该记录将指向 GitHub URL。这将为您处理 www 重定向。
  3. 在 gh-pages 分支的项目根目录中创建一个名为 CNAME(大写)的文件。这将告诉 Github 响应哪个 URL。
  4. 等待一切传播。

你会得到什么

您的内容将从http://nicholasjohnson.com 形式的 URL 提供。

访问http://www.nicholasjohnson.com 将返回一个 301 重定向到裸域。

重定向将遵循路径,因此到http://www.nicholasjohnson.com/angular 的流量将被重定向到http://nicholasjohnson.com/angular

每个存储库可以有一个项目页面,因此如果您的存储库是开放的,您可以拥有任意数量的项目。

流程如下:

1。创建 A 记录

对于A记录,将@指向以下ip地址:

@: 185.199.108.153
@: 185.199.109.153
@: 185.199.110.153
@: 185.199.111.153

这些是静态 Github IP 地址,您的内容将从这些 IP 地址提供。

2。创建 CNAME 记录

对于 CNAME 记录,将 www 指向 yourusername.github.io。注意尾随句号。另请注意,这是用户名,而不是项目名称。您还不需要指定项目名称。 Github 将使用 CNAME 文件 来确定从哪个项目提供内容。

例如

www: forwardadvance.github.io.

CNAME 的目的是将所有 www 子域流量重定向到 GitHub 页面,该页面将 301 重定向到裸域。

这是我用于自己网站http://nicholasjohnson.com的配置截图:

3。创建 CNAME 文件

在 gh-pages 分支的项目根目录中添加一个名为 CNAME 的文件。这应该包含您要服务的域。确保你提交并推送。

例如

nicholasjohnson.com

这个文件告诉 GitHub 使用这个 repo 来处理到这个域的流量。

4。等待

现在等待 5 分钟,您的项目页面现在应该已经上线了。

【讨论】:

  • 不,顶级域具有静态 IP。 www 子域具有 CNAME。
  • @superluminary,我重复了你的过程,我有两个问题,1)我正在使用 freeDNS害怕.org 进行 DNS 共享,它不允许添加尾随。在 username.github.io .. 2) 当我添加 github.io url 没有尾随 . 时,mydomain.com 正在工作,但我无法访问 www.mydomain.com ??
  • 我无法通过 GitHub 文档弄清楚的部分是该项目使用的 URL。感谢您的回答:“这是用户名,而不是项目名称。”所以使用yourUserName.github.io.
  • 我已经更新了这个解决方案并且真的推荐这样做。您可以通过其他方式使其工作,例如为@主机使用 CNAME,但它会破坏电子邮件等。这是我找到的最佳解决方案。谢谢。
  • 谢谢!我被困在 DNS 中 CNAME 记录的正确值上 - 只是 organization.github.io,无论您要为该组织下的哪个项目提供服务。 (即,不是 organization.github.io/repo)
【解决方案3】:

简答

这些详细的解释很好,但是 OP(和我)的困惑可以用一句话来解决:“将 DNS 直接发送到您的 GitHub 用户名组织, 忽略特定项目,并在您的项目存储库中添加适当的 CNAME files:GitHub 将根据 repository 中的 files 将正确的 DNS 发送到正确的项目."

【讨论】:

  • 我不知道“发送 DNS”是什么意思。
  • 重定向 DNS 查询,以便具有特定域名的 HTTP 请求获得正确的文档作为响应。
【解决方案4】:

如果您想知道如何让您的域显示为 www.mydomain.com 而不是将 www 请求重定向到 mydomain.com,试试这个:

gh-pages 上的 CNAME 文件 分支将只有一行:

www.mydomain.com(而不是mydomain.com

无论您对重定向的偏好如何(换句话说,无论您在 gs-pages 分支上的 CNAME 文件中的内容是什么),使用您的 DNS 提供商,您都应该这样设置:

A      @    192.30.252.154
A      @    192.30.252.153
CNAME  www  username.github.io

【讨论】:

  • @zwacky 为什么我不能将 CNAME 指向 @?为什么“www.mydomain.com”和“mydomain.com”应该解析到可能不同的IP?
【解决方案5】:

截至 2013 年 8 月 29 日,Github's documentation 声称:

警告:http://username.github.io/projectname 等项目页面子路径不会重定向到项目的自定义域。

【讨论】:

  • 我很困惑他们为什么要添加这种行为。我希望我的 .com 指向 github 页面,而不是相反。
  • 我也被这个弄糊涂了。据我所知,您仍然可以将 yoursite.com 指向 github 页面,但 yourusername.github.io/yoursite 不会重定向到 yoursite.com。这很好,因为 yoursite.com 仍然可以工作,只需确保更新您的 dns 记录并等待解决。 help.github.com/articles/…
  • 这应该对网站有 SEO(搜索引擎优化)的影响。据说谷歌降低了可从多个域访问的内容的结果排名,这是应用从 username.github.io/projectnamewww.projectname.com 的 301(“永久”)重定向的几个原因之一。
【解决方案6】:

经过一番挫折后,我刚刚发现,如果您使用PairNIC,您所要做的就是启用“自定义 DNS”下的“Web 转发”设置并提供 username.github.io/项目地址,它将自动为您设置顶点和子域记录。它似乎完全按照接受的答案中的建议进行。但是,它不会让您通过手动添加记录来做完全相同的事情。很奇怪。无论如何,我花了一段时间才弄清楚这一点,所以我想我会分享给大家省去麻烦。

【讨论】:

    【解决方案7】:

    现在事情变得容易多了!

    1. 更新您的 Apex 域 (@) 记录以指向

    192.30.252.154

    192.30.252.153

    1. 在您的 github 存储库设置中编辑您的 Custome domain 字段。

    1. www 和其他子域可以作为 CNAME 更新为顶级域。

    【讨论】:

      【解决方案8】:

      选择的答案很好,但很长,所以你可能没有读懂重点:

      我在访问 www.example.com 时遇到了 SSL 错误,但如果我访问 example.com,它工作正常

      如果你也遇到同样的情况,可能你的错误是在你设置的 DNS 配置中:

      CNAME www.example.com --> example.com  (WRONG)
      

      但是,你要做的是:

      CNAME www.example.com --> username.github.io  (GOOD)
      

      CNAME www.example.com --> organization.github.io  (GOOD)
      

      那是我的错误

      【讨论】:

        【解决方案9】:

        我想分享my steps,它与rynopsuperluminary 提供的有点不同。

        • 对于A 记录完全一样,但是
        • 我宁愿将其重定向到我的空白域 (non-www),而不是为 www 创建 CNAME

        此配置参考preferred domain的指导。 wwwnon www 或反之亦然的域设置在每个域提供程序上可能不同。由于我的域在 GoDaddy 下,所以在 Domain Setting 下我使用 Subdomain Forwarding (301) 进行设置。

        作为将域指向 Github 存储库的结果,它将提供 mastergh-pages 的所有 URL。

        除了上面的 CNAME 文件之外,您可能需要在 GitHub Pages 上完全 bypass Jekyll processing,方法是在页面存储库的根目录中创建一个名为 .nojekyll 的文件。

        【讨论】:

        • 我建议不要使用godaddy,只是个人意见
        • 你在 master 分支中没有 CNAME。
        • @Rubel First:我已经指出“而不是创建 CNAME”。第二:该域已不存在,因此我删除了实时示例。谢谢提醒我。
        猜你喜欢
        • 2013-05-11
        • 2019-04-26
        • 2017-03-20
        • 2012-11-29
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        相关资源
        最近更新 更多