GitHub项目页面的自定义域

在我的一个http://github.com回购中有一个gh-pages分支。如果我去http://myuser.github.com/myrepo, GitHub项目页面工作正常

我想设置一个自定义域(myexample.com),将提供这个项目页面。我想要这两个 myexample.comwww.myexample.com来提供这些项目页面。

GitHub页面有帮助表示在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支持,他们的回复是

据我所知,你不能让两者指向同一页。

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

以前有人成功做到过吗?

123730 次浏览

1/23/19更新:

自从我上次回答问题以来,情况已发生了很大变化(向好的方向发展)。这个更新的答案将告诉你如何配置:

  1. 根尖(example.com)
  2. 子域(www.example.com)
  3. HTTPS(可选,但强烈鼓励)

最后,所有到example.com的请求都将被重定向到https://www.example.com(如果你选择不使用HTTPS,则为http://)。我总是使用www作为我的最终着陆。为什么(12),是另一个讨论。

这个答案很长,但它是复杂。我说得太啰嗦了,因为关于这个主题的GitHub文档并不清晰或线性。

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

  1. 从你的回购,点击标签
  2. 向下滚动到GitHub Pages部分。你有两个选项:
  3. 选择master branch将把/README.md作为你的web index.html。选择master branch /docs folder将把/docs/README.md作为你的web index.html
  4. 选择一个主题。
  5. 请稍候,GitHub正在发布您的网站。通过单击Your site is ready to be published at旁边的链接来验证它是否有效

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

在这里输入您的自定义域名,并点击save: < img src = " https://i.stack.imgur.com/s7Ib1.png "高度= " 275 " / > < / p >

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

  • 如果你添加到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)你会用子域留空来表示@。无论哪种情况,这些都是要创建的A记录:

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

查看Github文档来确认这些是最新的ip。

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

这是最令人困惑的部分。

注意YOUR-GITHUB-USERNAME 的GitHub回购名称!YOUR-GITHUB-USERNAME的值由这个图表决定。

对于用户页面站点(很可能就是你所在的站点),CNAME条目将是username.github.io,例如: < img src = " https://i.stack.imgur.com/d4r75.png "高度= " 150 " / > < / p > 对于组织页面站点,CNAME条目将是orgname.github.io,例如: < img src = " https://i.stack.imgur.com/Z290i.png "高度= " 150 " / > < / p >

步骤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处理。

一旦处理完成,它看起来应该是这样的:

enter image description here

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

这就是它!

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

希望这能有所帮助!!

截至2013年8月29日,Github的文档声明:

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

概述

用户页面相反,当涉及到项目页面时,文档有点令人困惑。感觉你应该做更多的事情,但实际上这个过程非常简单。

它包括:

  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地址,您的内容将从中提供服务。

2. 创建CNAME记录

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

如。

www: forwardadvance.github.io.

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

下面是我自己的网站http://nicholasjohnson.com配置的截图:

 a和CNAME记录所需的Github静态页面

3.创建CNAME文件

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

如。

nicholasjohnson.com

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

4. 等待

现在等待5分钟,您的项目页面现在应该是活动的。

我刚刚发现,经过一些挫折,如果你使用PairNIC,你所要做的就是启用“自定义DNS”下的“Web转发”设置,并提供用户名。github。Io /项目地址,它会自动为您设置顶点和子域记录。它似乎完全按照公认答案的建议来做。但是,它不允许您通过手动添加记录来完成完全相同的事情。很奇怪。不管怎样,我花了一段时间才弄明白,所以我想我还是和大家分享一下,免得大家麻烦。

我想分享< em > < / em >我的步骤,它与rynopsuperluminary提供的有点不同。

  • for A Record是完全相同的,但是
  • 与其为www创建CNAME,我更愿意将其重定向到我的空白域(non-www)

此配置引用< em >首选域< / em >的指导。在每个域提供程序上,wwwnon www的域设置可以不同。由于我的域在GoDaddy下,所以在域设置下,我使用子域转发(301)设置它。

作为将域指向Github存储库的结果,它将给出mastergh-pages的所有url。

除了上面的CNAME文件外,你可能需要在GitHub Pages上创建一个名为.nojekyll的文件,在你的页面repo的根目录下。

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

g -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

简短的回答

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

现在事情容易多了!

  1. 更新您的Apex域(@)记录到点

192.30.252.154

192.30.252.153

  1. 编辑你的Custome域字段在你的github回购设置。
< p > < kbd > enter image description here < / p >

< / kbd >

  1. www等子域名可以更新为CNAME到apex域名。

所选的答案是好的答案,但很长,因此你可能没读到重点:

我在访问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)

这是我的错误