GitHub项目页面的自定义域

时间:2012-01-31 15:50:13

标签: github dns

我的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记录。

之前有没有人成功完成这项工作?

9 个答案:

答案 0 :(得分:464)

1/23/19更新:

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

  1. Root apex(example.com)
  2. 子域名(www.example.com)
  3. HTTPS(可选但强烈鼓励)
  4. 最后,对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
    6. 旁边的链接验证其是否有效

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

      在此处输入您的自定义域名,然后点击save

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

      • 如果您添加到GitHub页面网站的自定义域名为example.com,则www.example.com将重定向到example.com
      • 如果您添加到GitHub页面网站的自定义域名为www.example.com,则example.com会重定向到www.example.com

      如前所述,我建议您始终在www登陆,以便我如上图所示输入www.example.com

      步骤3:创建DNS条目

      在DNS提供商的网络控制台中,创建四条A条记录和一条CNAME

      1. A @(又名root apex)的记录:
      2. 某些DNS提供商会让您指定@,其他DNS(例如AWS Route35),您将leave the sub-domain blank指示@。在任何一种情况下,these都是要创建的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
        2. 这是最令人困惑的部分。

          请注意YOUR-GITHUB-USERNAME GitHub回购名称! YOUR-GITHUB-USERNAME的值由this chart确定。

          对于用户页面网站(很可能是您的网站),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

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

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

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

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

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

            enter image description here

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

            就是这样!

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

            希望这会有所帮助!!

            ...

            旧(1923年1月23日之前)回答

            所以我明白了。 James McLaughlin给了我需要的轻推。

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

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

              dig yourdomain.com +nostats +nocomments +nocmd

答案 1 :(得分:237)

概述

用户页面相比,documentation项目页面方面有点令人困惑。感觉你应该做更多,但实际上这个过程非常简单。

涉及:

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

    您的内容将通过http://nicholasjohnson.com格式的网址投放。

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

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

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

    这是过程:

    1。创建记录

    对于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 文件来确定从哪个项目提供内容。

    e.g。

    www: forwardadvance.github.io.
    

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

    以下是我用于自己网站http://nicholasjohnson.com的配置的屏幕截图:

    A and CNAME records required for Github Static Pages

    3。创建CNAME文件

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

    e.g。

    nicholasjohnson.com
    

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

    4。等待

    现在等待5分钟,您的项目页面现在应该有效。

答案 2 :(得分: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

答案 3 :(得分:15)

简短回答

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

答案 4 :(得分:13)

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

  

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

答案 5 :(得分:3)

现在事情变得容易多了!

  1. 将您的Apex域(@)记录更新为指向
  2.   

    192.30.252.154

         

    192.30.252.153

    1. 在github repo设置中修改 Custome域字段。
    2. enter image description here

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

答案 6 :(得分:2)

我刚刚发现,如果您使用PairNIC,我只需要启用“自定义DNS”下的“Web转发”设置并提供username.github。 io /项目地址,它将自动为您设置apex和子域记录。它似乎完全符合接受的答案中的建议。但是,它不会让您通过手动添加记录来完成相同的操作。很奇怪。无论如何,我花了一段时间才弄明白,所以我想我会分享给别人解决麻烦。

答案 7 :(得分:1)

选择的答案是好的,但很长,所以您可能没有阅读关键点:

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

那是我的错误

答案 8 :(得分:0)

我想分享my steps,这与rynopsuperluminary提供的内容略有不同。

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

此配置指的是preferred domain的指导。 wwwnon www的域设置或反之亦然,每个域提供商的域设置可能不同。由于我的域名在GoDaddy下,因此在域名设置下,我使用 Subdomain Forwarding (301)进行设置。

作为将域指向Github存储库的结果,它将为mastergh-pages分支提供所有URL,类似于我在下面列出的那些到达首选域:< / p>

掌握

CNAME分支上创建master文件(在user repository上查看)。

  

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

gh-pages

CNAME分支上创建相同的gh-pages文件(在project repository上查看)。

  

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

作为上述CNAME文件的补充,您可能需要在网页库的根目录中创建名为.nojekyll的文件,以便在GitHub页面上完全bypass Jekyll processing