GitHub项目页面的自定义域


436

我的一个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文件说做一个CNAME对“charlie.github.com”记录下哪些是用户页面资料库。我没有用户页面资料库-我只有一个项目库和一个gh-pages分支,我想用的myexample.comwww.myexample.com

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

我会尝试一下,但是我想确保它能正常工作,因为我已经在www.myexample.com上线了,并且不想出错。

我通过电子邮件发送了GitHub支持,他们的回复是

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

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

以前有人成功做到过吗?


10
我已经建立了lacewing-project.org只有一个A记录指向到207.97.227.245(无CNAME记录),并能正常工作。我还在包含域名的gh-pages分支的根目录中放置了一个名为CNAME的文件。
詹姆斯·麦克劳克林

就我而言,仅将CNAME文件放在gh-pages分支中就可以了,谢谢!
jarandaf '16

Answers:


522

19/1/23更新:

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

  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视为您的网络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.comwww.example.com则将重定向到example.com
  • 如果您添加到GitHub Pages站点的自定义域是www.example.comexample.com则将重定向到www.example.com

如前所述,我建议始终降落在,www因此我www.example.com如上图所示进入。

步骤3:创建DNS条目

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

  1. A用于记录@(又名根尖):

某些DNS提供程序将由您指定@,其他DNS提供程序(如AWS Route 53)将您将子域留空以表示@。无论哪种情况,这些都是A要创建的记录:

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
  1. 创建一条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条目

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

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

这些DNS条目解析/传播可能需要一个小时左右的时间。完成后,将您的浏览器打开到http://example.com,然后应将其重定向到http://www.example.com

步骤6:SSL(HTTPS)配置。可选,但强烈建议

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

如果Enforce HTTPS复选框下方有一条消息,指出该消息仍在处理中,则需要等待。您可能还需要点击saveCustom domain部分中的按钮以开始Enforce HTTPS处理。

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

在此处输入图片说明

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

而已!

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

希望这可以帮助!!

...

旧(1/23/19之前)答案

所以我想通了。詹姆斯·麦克劳克林James McLaughlin)给了我所需的轻推。

要为处理www.yourdomain.com和yourdomain.com的gh-pages Project Pages回购设置自定义域(假设您的回购中已经有gh-pages分支):

  1. 从项目仓库中,gh-pages分支。使用内容创建一个CNAME文件yourdomain.com。提交然后推送。
  2. 在您的DNS管理器中,设置两个cname记录。一个用于根尖(@),另一个用于www。两者都指向YOURusername.github.io。如果您的DNS提供商不支持ALIAS根尖(@)上的A记录,只需创建指向192.30.252.153和的记录192.30.252.154
  3. 等待直到名称服务器更新:

    dig yourdomain.com +nostats +nocomments +nocmd


14
随着2012年4月19日,中GitHub的文档使用204.232.175.78的IP地址。
Aseem Kishore

31
在2014年2月6日检查过,并且github文档说:创建指向以下IP地址的DNS A记录:192.30.252.153,192.30.252.154。
Danny

2
“如果您使用指向207.97.227.245或204.232.175.78的A记录,则您将需要更新DNS设置,因为我们不再直接从这些服务器提供Pages。” help.github.com/articles/my-custom-domain-isn-t-working - 14年3月8日
eddywashere

11
我认为无法通过裸@域设置CNAME记录。这就是为什么需要A记录来处理从裸域到www子域的重定向。任何cloudhost都有问题。不保证固定IP。
superluminary 2014年

2
@rynop GoDaddy不允许@和www到yourusername.github.io,每个子域只有一个CNAME记录:(
Tejas Manohar 2014年

241

总览

文件是一点点,当谈到混乱项目页面,而不是用户页面。感觉您应该做更多的事情,但是实际上这个过程很容易。

它涉及:

  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指向yourusername.github.io。请注意尾随句号。还要注意,这是用户名,而不是项目名。您不需要指定项目名称。Github将使用CNAME 文件来确定要从中提供内容的项目。

例如

www: forwardadvance.github.io.

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

这是我在自己的网站http://nicholasjohnson.com上使用的配置的屏幕截图:

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

3.创建一个CNAME文件

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

例如

nicholasjohnson.com

该文件告诉GitHub使用此存储库来处理到该域的流量。

4.等一下

现在等待5分钟,您的项目页面现在应该可以使用了。


1
不,顶点域具有静态IP。www子域具有CNAME。
superluminary 2014年

4
@superluminary,我重复了您的过程,并且遇到两个问题:1)我正在使用freeDNS fear.org进行DNS共享,这不允许添加结尾。在username.github.io ..中。2)当我添加github.io url时不带结尾。
bistaumanga 2014年

4
我无法通过GitHub文档了解的部分是该项目使用的URL。感谢您提供以下答案:“这是用户名,而不是项目名称。” 因此使用yourUserName.github.io.
pkamb 2015年

1
我已经更新了此解决方案,并且真的建议您这样做。您可以使它以其他方式工作,例如对@主机使用CNAME,但是它将破坏电子邮件等。这是我找到的最佳解决方案。谢谢。
史蒂文·

1
谢谢!我被困在DNS中CNAME记录的正确值上-只是organization.github.io,无论您要服务于该组织下的哪个项目。(即NOT organization.github.io/repo)–
Libby

21

如果您想知道如何显示您的域,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?
aaa90210

19

简短答案

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


1
我不知道“发送DNS”是什么意思。
将于

重定向DNS查询,以便具有特定域名的HTTP请求获得正确的文档作为响应。
Jim Pivarski '17

13

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

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


3
我很困惑他们为什么添加此行为。我希望我的.com指向github页面,而不是相反。
乔丹

9
我对此也感到非常困惑。据我所知,您仍然可以将yoursite.com指向github页面,但是yourusername.github.io/您的网站不会重定向到yoursite.com。没关系,因为yoursite.com仍然可以正常工作,只需确保更新您的dns记录并等待其解决。help.github.com/articles/...
eddywashere

该网站应具有SEO(搜索引擎优化)分支。谷歌被认为降级结果中的排名是由多个域,这是几个原因,从应用301(“永久”)重定向一个访问的内容username.github.io/projectnamewww.projectname.com
BorromeanNot

3

如今事情变得容易得多!

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

192.30.252.154

192.30.252.153

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

enter image description here

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

2

沮丧之后,我才发现,如果您使用PairNIC,那么您要做的就是启用“自定义DNS”下的“ Web转发”设置,并提供username.github.io/project地址,它将自动为您设置顶点记录和子域记录。它似乎完全可以接受答案中的建议。但是,它不会让您通过手动添加记录来执行完全相同的操作。很奇怪。无论如何,我花了一些时间才弄清楚这一点,所以我认为我愿意与大家分享解决麻烦的方法。


0

我想与大家分享我的脚步,这是一个有点不同,以由什么提供rynopsuperluminary

  • A记录是完全一样的,但
  • 与其为之创建CNAMEwww不如将其重定向到我的空白域(non-www

此配置是指首选域的指导。在每个域提供程序上,“ www向” non www或“反之亦然”的域设置可以不同。由于我的域位于GoDaddy下,因此在“ 域设置”下, 我使用“ 子域转发”(301)对其进行了设置。

将域指向Github存储库的结果是,它将提供mastergh-pages分支的所有URL 类似,就像我下面列出的进入首选域的URL :

通过CNAMEmaster分支上创建文件(在我的用户存储库中检查文件)。

http://hyipworld.github.io/
http://www.hyip.world/
http://hyip.world/

gh页

通过CNAMEgh-pages分支上创建相同的文件(在我的项目存储库中检查它)。

http://hyipworld.github.io/maps/
http://www.hyip.world/maps/
http://hyip.world/maps/

除了CNAME上面的文件,您可能需要通过在页面存储库根目录中创建一个命名文件来完全绕过 GitHub Pages上的Jekyll处理.nojekyll


3
我建议不要使用Godaddy,而要使用个人意见
MMachinegun
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.