关于Github个人网站绑定域名的原理分析和操作
在建立个人网站以后,由于这种博客的服务器是建立在github的,通过修改github的page页来实现个人网站的效果。
所以我们的网站域名其实是对一个github仓库的访问,访问后便展示这个仓库的page页。
所以所谓的「域名」xxxx.github.io,其实是对一个github仓库的访问。所谓的域名其实是仓库名字。
如果输入时在前面加上www,会显示404页面,表示找不到这个仓库。
而且github.io的后缀也非常冗长,不利于显示出网站的风格。
那么有什么办法可以转换域名呢?办法就是更改DNS解析。
DNS简介
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址互相映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
DNS的分布数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space),如下图所示树的最大深度不得超过127层,树中每个节点都有一个可以长达63个字符的文本标号。
- DNS域名解析过程
1,在浏览器中输入http://pool.btc.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2,如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3,如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4,如果要查询的域名,不在本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5,如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://BTC.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://pool.btc.com域服务器,重复上面的动作,进行查询,直至找到http://pool.btc.com主机。
6,如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
从上面的介绍中我们呢可以看到,DNS解析的本质其实是将域名和IP地址联系起来,将一个输入的域名转换为网络能理解的IP地址。
对与普通的服务器,只要将域名和服务器的IP地址绑定起来,就可以完成这一映射关系。
但是这个转换工作是谁进行的呢?这个交换服务就要依靠DNS服务器了。
DNS服务器
DNS服务器更像一个庞大的数据库,通过建立类似于python字典一样的关系,那么就可以从数据库中提取出所需的信息。
如果在一个DNS服务器上找不到需的信息,就会向它的上级服务器发送请求,直到获得答复或者顶级服务器无应答。
但是要怎么样才能往一个DNS服务器添加网站信息呢?要按照情况分类讨论。
顶级DNS服务器
这种服务器是最高的级别,理论上中国的三大运营商的自动分配的服务器也都可以解析。
想要向这个服务器添加IP信息,这时候就要执行「购买域名」的操作了。
购买域名后,DNS服务器就可以进行转换操作,在正规大平台的服务器往往能覆盖更广的范围,成为更多服务器的上级服务器。
普通DNS服务器
如果在普通DNS服务器上添加,就有可能无法解析。
举一个较为极端的例子,向自己搭建的DNS服务器添加IP信息,运营商不会指定这一个DNS服务器作为其他用户的DNS服务器,
所以尽量在更高级的DNS服务器里添加自己网站的IP信息。
GIthub页面的特殊性
以上是普通网站的页面处理方法,但是github的页面具有一定的特殊性。
如这两个网站:
在使用ping命令测试的时候,我们发现这两个网站的IP地址是相同的。
原因在于这两个所谓的「网站」其实都是github服务器上的一个仓库,服务器的IP地址都是github的。
那么这时候似乎就产生了一个bug:如果我们绑定了github的IP,以后域名的解析就都会解析到github的首页。
所以github的设计者们就想出了这样一个办法:(www.example.com 为示范域名,而example.github.io为仓库)
- DNS服务器解析www.example.com后,返回github服务器的IP。
- 客户端访问IP,并传递域名参数www.example.com。
- github服务器处理请求,并且根据域名参数寻找对应的库。
- 将仓库的页面返回给客户端,完成请求。
所以关键之处就在于给仓库添加一个域名参数。
添加域名参数
可以在guihub上面手动添加我们的域名参数,但这个方法不够安全稳定,而且难以修改。
因此建议在本地文件中的source文件夹中新建一个文本文档,里面写上自己购买的域名。(有无www都可以)对啊好
然后将此文件保存并删除txt后缀。
将其重命名为CNAME
,等待下一次部署便可自动修改。
解析IP
在这里就要注意到一点:github的IPv4地址共有四个,还有一些IPv6地址,所以建议添加以下IP:
1 |
|
A代表是IPv4地址,@代表不加www的域名,如example.com,www代表域名的全称,如www.example.com
这样无论访问者加不加WWW,都可以解析到正确的IP。
这四个IP地址是Github的常用IP,最好全部添加,万一Github换用服务器(经常性行为),就会导致无法访问。