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

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

GitHub页面帮助说要在DNS中创建A记录和CNAME记录。A记录是有意义的,但我不知道在我的DNS中做什么CNAME记录。

gh-pages文档说要为'charlie.github.com'做一个CNAME记录,这是一个用户页面存储库。我没有用户页面存储库-我只有一个项目存储库和gh-pages分支,我想用于myexample.com和www.myexample.com。

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

我只是尝试一下,但我想确保这将工作,因为我已经www.myexample.com活,不想犯错误。

我发邮件给GitHub支持,他们的回复是

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

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

以前有人成功做到过吗?


当前回答

现在事情容易多了!

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

192.30.252.154 192.30.252.153

编辑你的自定义域域在你的github回购设置。

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

其他回答

1/23/19更新:

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

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

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

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

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

从你的回购,点击标签 向下滚动到GitHub Pages部分。你有两个选择: 选择主分支将处理/README。Md作为你的web index.html。选择主分支/docs文件夹将处理/docs/README。Md作为你的web index.html。 选择一个主题。 请稍候,GitHub正在发布您的网站。通过单击“您的网站已准备好发布”旁边的链接来验证它是否有效

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

在这里输入您的自定义域名并点击保存:

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

如果您添加到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。

A @(又名根尖)的记录:

一些DNS提供商会让你指定@,其他的(如AWS Route 53)你会让子域为空来表示@。在任何一种情况下,这些是要创建的A记录:

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

检查Github文档,确认这些是最新的ip。

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

这是最令人困惑的部分。

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

对于用户页面站点(很可能就是你自己的站点),CNAME条目将是username.github。io,例:

对于组织页面站点,CNAME条目将是orgname.github。io,例:

步骤5:确认DNS表项

通过dig +noall +answer example.com确认您的A记录。它应该返回4个185.x.x。x输入的IP地址。 通过运行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设置。如果您已经打开了设置页面,请硬刷新页面。

如果在强制HTTPS复选框下有一条消息,说明它仍在处理中,您将需要等待。您可能还需要点击自定义域部分中的保存按钮来启动强制HTTPS处理。

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

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

就是这样!

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

所选的答案很好,但太长了,所以你可能看不清重点:

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

如果同样的情况发生在你身上,可能你的错误是在DNS配置中设置:

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

但是,你要做的是:

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

or

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

这是我的错误

截至2013年8月29日,Github的文件声称:

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

简短的回答

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

概述

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

它包括:

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

你会得到什么

您的内容将通过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文件来决定从哪个项目提供内容。

e.g.

www: forwardadvance.github.io.

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

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

3.创建CNAME文件

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

e.g.

nicholasjohnson.com

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

4. 等待

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