如何设置Github Pages将DNS请求从子域(例如www)重定向到顶级域(TLD,Apex记录)?

时间:2014-04-29 21:15:31

标签: dns github-pages

如何以对www.example.comexample.com的请求显示GitHub Pages服务器上托管的网站的方式配置DNS服务提供商?当网站打开时,我的浏览器地址栏应包含example.com

我的DNS服务提供商是gandi.net。它不支持ALIAS DNS记录类型。

1 个答案:

答案 0 :(得分:101)

简短回答

步骤1:将新文件CNAME添加到仅包含一行的GitHub页面存储库:您的顶级域名。

E.g:

example.com

第2步:[可选]但强烈推荐

2.1:从DNS配置中删除所有其他类型为A的顶级记录(以@为前缀)。

2.2:删除第二级域CNAME的{​​{1}}记录(如果有)。

第3步:将这3个条目添加到DNS配置的最顶层:

www

@ A 192.30.252.153 @ A 192.30.252.154 www CNAME your_github_username.github.io. 替换为您的实际GitHub用户名。

第4步:等待DNS更改传播。

DNS更改不会立即生效。它们可能需要一整天才能传播。


答案很长

这个问题有两个方面。一个是DNS配置本身。另一个是GitHub Pages转发HTTP请求的方式。

我们需要了解一些事情,以了解GitHub在其文档中试图说明的内容。

DNS条目类型

我们感兴趣的有两种类型的DNS记录:your_github_usernameCNAME

A也称为A,有时也称为Apex。它会将请求转发到指定的固定 IP地址。 root entry条目将请求转发到指定的URL(实际有效的纯文本URL,而不是IP地址)。

DNS负载平衡

GitHub有一个中心URL地址,可以接受GitHub页面的所有DNS请求:CNAME。该URL根据您的地理位置解析为不同的IP地址。在GitHub页面上托管的网站是http://username.github.ioHTMLCSS文件的简单集合。 GitHub将这些文件分发到全球的不同服务器。因此,当您的浏览器从欧洲发送请求时,它会从欧洲的服务器接收数据。这同样适用于亚洲和美国的请求。

GitHub试图说什么

由于DNS中的JS条记录必须包含IP地址,并且它们必须是A192.30.252.153,因此无法将请求转发到位于欧洲或亚洲某处的服务器。您在GitHub Pages上托管的网站将从中央GitHub Pages服务器下载。如果GitHub页面DNS服务器(192.30.252.154x.x.x.153)由于某种原因而关闭,则存在一个小风险,所有使用固定GitHub页面IP地址的自定义域将无法访问(其DNS请求)将无法解决。)

这就是为什么GitHub强烈建议为您的GitHub页面使用二级域名(例如x.x.x.154)或使用支持记录类型blog.example.com的DNS服务提供商作为{{{ 1}}记录但转发请求到URL地址(例如ALIAS)而不是固定的IP地址。

GitHub页面如何处理HTTP请求

A的DNS请求解析为IP地址后,例如username.github.io您的浏览器使用HTTP标头your_github_username.github.io.向该服务器发送HTTP请求。以下是加载相同网站192.30.252.153示例(如果您在代理服务器后面,这些示例可能无效)

Host

这样GitHub Pages服务器就知道要服务哪个用户网站。

  

如果您的curl文件包含$> curl --header "Host: your_github_username.github.io" http://192.30.252.153/ $> curl --header "Host: www.example.com" http://192.30.252.153/ $> curl --header "Host: example.com" http://192.30.252.153/ 但请求CNAME,GitHub Pages服务器会自动将HTTP请求重定向到顶级域名。

     

如果您的example.com文件包含www.example.com但HTTP请求中的标头CNAME包含www.example.com,则同样有效。

为什么我无法在我的DNS配置中添加接受顶级请求(Host)的example.com记录条目?

来自GitHub Pages文档的引用:

  

警告:请勿为自定义顶点域创建CNAME记录!这样做可能会导致该域上的其他服务(例如电子邮件)出现问题。


参考文献:

Setting up a custom domain with GitHub Pages

My custom domain isn't working

Cannot access my GitHub Pages website by IP Address