如何以对www.example.com
和example.com
的请求显示GitHub Pages服务器上托管的网站的方式配置DNS服务提供商?当网站打开时,我的浏览器地址栏应包含example.com
。
我的DNS服务提供商是gandi.net
。它不支持ALIAS
DNS记录类型。
答案 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记录:your_github_username
和CNAME
。
A
也称为A
,有时也称为Apex
。它会将请求转发到指定的固定 IP地址。 root entry
条目将请求转发到指定的URL(实际有效的纯文本URL,而不是IP地址)。
GitHub有一个中心URL地址,可以接受GitHub页面的所有DNS请求:CNAME
。该URL根据您的地理位置解析为不同的IP地址。在GitHub页面上托管的网站是http://username.github.io
,HTML
和CSS
文件的简单集合。 GitHub将这些文件分发到全球的不同服务器。因此,当您的浏览器从欧洲发送请求时,它会从欧洲的服务器接收数据。这同样适用于亚洲和美国的请求。
由于DNS中的JS
条记录必须包含IP地址,并且它们必须是A
或192.30.252.153
,因此无法将请求转发到位于欧洲或亚洲某处的服务器。您在GitHub Pages上托管的网站将从中央GitHub Pages服务器下载。如果GitHub页面DNS服务器(192.30.252.154
和x.x.x.153
)由于某种原因而关闭,则存在一个小风险,所有使用固定GitHub页面IP地址的自定义域将无法访问(其DNS请求)将无法解决。)
这就是为什么GitHub强烈建议为您的GitHub页面使用二级域名(例如x.x.x.154
)或使用支持记录类型blog.example.com
的DNS服务提供商作为{{{ 1}}记录但转发请求到URL地址(例如ALIAS
)而不是固定的IP地址。
将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
,则同样有效。
Host
)的example.com
记录条目?来自GitHub Pages文档的引用:
警告:请勿为自定义顶点域创建CNAME记录!这样做可能会导致该域上的其他服务(例如电子邮件)出现问题。
Setting up a custom domain with GitHub Pages