【第15篇博客】使用新的免费短域名
注册freenom免费域名
https://www.freenom.com/en/index.html
我们熟知的免费域名,有.tk,.ml,.cf。.tk域名是南太平洋岛国托克劳的顶级域名,.ml则是马里的顶级域名,.cf则是中非共和国的域名,不过搜索引擎基本上已经不收录了,虽然这些域名和.cn其实没什么区别。以前这些免费域名都是分开注册的,后来都被托管到了freenom,更加方便大家的注册。不过先在freenom也办法直接注册了,当你注册的时候会显示如下:
建议先用google登录!然后寻找自己想要的域名。
接着去结账
接下来可以看到自己已经申请成功。
接下来选择我们要设置的域名,比如说.tk,点击manage domain。
后续需要先进行Cloudflare方面的设置。
Cloudflare
登录后添加站点
选择0美元的继续
接下来进行添加DNS记录
添加2条类型为CNAME的记录,名称分别为@和www,分别进行保存,如下
接下来显示我们还需要做的事情,就是到我们的注册机构,也就是freenom中更改名称服务器。
回到freenom设置我们的名称服务器
。
再回到cloudflare中,进行检查。
是的,接下来就收到了邮件。
回到cloudflare
Github仓库Settings
找到GitHub Pages项。
输入刚才申请的域名如tsuiwade.tk
,点击保存。下面那个HTTPS证书会在你保存域名后自动帮你申请,不过可能最长需要24小时才能申请成功。
如果上面的步骤都完成后,等待一会,在浏览器的地址栏输入新增域名,应该就可以跳转到你的博客页面了。
本地CNAME文件
这是困扰了我很多天的问题,在于每当我重新提交代码的时候,我的博客仓库中的站点域名又被清空为原先的.github.io域名,而非自己在Custom domain
中填写的其他域名。
如果需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录。
A记录是解析域名到IP,CNAME是解析域名到另外一个域名。
A记录
A记录,即Address记录,它并不是一个IP或者一个域名,我们可以把它理解为一种指向关系:域名 http://www.xx.com → 111.111.111.111 主机名 DD → 222.222.222.222
也就是当你访问这些域名或者主机名的时候,DNS服务器上会通过A记录会帮你解析出相应的IP地址,以达到后续访问目的。所以A记录是IP解析,直接将域名或主机名指向某个IP。
CNAME
CNAME记录,也叫别名记录,相当于给A记录中的域名起个小名儿,比如http://www.xx.com的小名儿就叫http://www.yy.com好了,然后CNAME记录也和A记录一样,是一种指向关系,把小名儿http://www.yy.com指向了http://www.xx.com,然后通过A记录,http://www.xx.com又指向了对应的IP:
http://www.yy.com → http://www.xx.com → 111.111.111.111
这样一来就能通过它的小名儿直接访问111.111.111.111了。
这时候有人问:这不多了一步嘛,不嫌麻烦?
假如这个时候我又想给原域名取几个小名儿,分别叫http://www.cc.com和http://www.kk.com那么存在下列指向关系:
http://www.yy.com → http://www.xx.com → 111.111.111.111
http://www.cc.com → http://www.xx.com → 111.111.111.111
http://www.kk.com → http://www.xx.com → 111.111.111.111
突然服务器的IP地址因为一些不可描述的原因要换了,不再是111.111.111.111了,换成了333.333.333.333,这时候你发现,只要把http://www.xx.com的指向修改一下即可:
域名 http://www.xx.com → 333.333.333.333
这时候你又发现了,原来他的小名儿不需要做更改,直接就能访问服务器,因为他们都只指向了http://www.xx.com,服务器IP改没改它们不管
那么假如不用CNAME,直接做A记录会怎样?
http://www.yy.com → 111.111.111.111
http://www.cc.com → 111.111.111.111
http://www.xx.com → 111.111.111.111
http://www.kk.com → 111.111.111.111
那么当111.111.111.111更改的时候,全部相关A记录指向关系都要做更改,这才叫麻烦…
因此我们这边,实际上指向的关系是,tsuiwade.ml域名指向tsuiwade.github.io,当访问ml时,DNS商回把这个这个请求解析发到github去,github内部进行处理,那么github要如何知道它应该响应哪个仓库的内容回去呢?是根据你在仓库Gitpages设置的自定义域名,来给你响应对应仓库的静态内容。
CNAME的应用
比较多的是用在CDN加速上
举个CDN的栗子 :假如你是DD公司老板,你公司中的一台IP为1.1.1.1的服务器,注册了域名为http://www.dd.com,要对外提供客户访问。随着公司越做越大,访问量也越来越多,服务器顶不住了,你去找CDN提供商购买CDN加速服务,这个时候他们要求你的域名做个CNAME指向他们给你的一个域名叫http://www.xdd.com,当用户访问http://www.dd.com的时候,本地DNS会获得CDN提供的CNAME域名:http://www.xdd.com,然后再次向DNS调度系统发出请求,通过DNS调度系统的智能分析,把这个http://www.xdd.com指向一个(离用户地理位置最近的)CDN提供商的服务器IP,让用户就近取到想要的资源(如访问网站),大大降低了延迟。
解决方法就是在博客文件的source目录下,新增一个CNAME文件,注意全大写,并且没有文件后缀。CNAME中写:
tsuiwade.tk |
最后可以在公开的博客仓库的master分支下,看到新增了CNAME文件,并且setting中的站点域名是我所设置的。
source 文件夹,实质上才是你发布时候使用的根目录,你项目的根目录,只是开发的时候的根目录而已。hexo build 的时候,会将 source 目下下的内容进行一次拷贝,如果放在项目根目录下的话,文件并不会存在于构建输出的目录里。
参考:https://blog.csdn.net/xs20691718/article/details/81873921
可能遇到的问题
我前面使用的是.ml后缀的域名,后来再输入github.io的时候,会自动跳转到ml,导致问题。后来打开浏览器设置选项,清空用户的缓存文件和cookies即可。