hexo(1) hexo自定义域名以及解析

最近又有点空,把丢弃好久的blog又拿出来折腾了一番。申请了一个付费域名 blog.wyue.site不得不说,在msra这一年多依赖,不知不觉代码能力比以前还是提高了很多的(自吹一波。。。溜了)
这次想要记录一下,hexo博客搭建过程中个性化域名的相关事情。主要是从个性化域名的绑定,到dns的解析的整个过程。涉及到的坑主要有

  1. dns 解析的相关基础知识
  2. 国内博客托管到 coding 国外托管到github
  3. 同一个域名分别解析到这两个地址
  4. 这两个博客托管网站上的设置。特别是github 有一个奇怪的CNAME 文件要放到根目录下,如何利用hexo直接生成

这里默认大家已经在coding和github上托管好自己的blog了。也就是说,可以用 username.github.io 和 username.coding.me 访问自己的博客了。如果大家还不清楚的话,网上教程很多。也可以留言。

下面就是详细内容啦。

1.dns 解析的相关基础知识

这方面我也是现学现卖。水平大概是刚刚好能把这个博客搭起来并且正确设置成自定义域名的水平。要是有什么不对的,欢迎留言指正.

dns 解析的基本流程

这部分其实参考了很多 这里这里,还有这里 的内容。具体可以参考前面三个网址。我这里大概点到后面会涉及的几个概念。

  1. DNS 的定义和作用

    DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69

  2. DNS 解析的过程

    就拿博客来举例。假设你在github上托管了一个网站,github给你分配了一个ip地址和一个配套的域名(假设为 test.github.io).

    那么你在请求 test.github.io 的时候,就要先从dns服务器上找到这个域名的对应的ip地址,如果你用的是linux服务器,你可以输入dig test.github.io 来查看这个过程。拿我这博客来说吧,输入 dig wangyue.ml, 应该就能看到如下字符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    >$ dig wangyue.ml
    >; <<>> DiG 9.9.5-3ubuntu0.16-Ubuntu <<>> wangyue.ml
    >;; global options: +cmd
    >;; Got answer:
    >;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50601
    >;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

    >;; OPT PSEUDOSECTION:
    >; EDNS: version: 0, flags:; udp: 4000
    >;; QUESTION SECTION:
    >;wangyue.ml. IN A

    >;; ANSWER SECTION:
    >wangyue.ml. 599 IN CNAME xfdywy.github.io.
    >xfdywy.github.io. 3599 IN CNAME sni.github.map.fastly.net.
    >sni.github.map.fastly.net. 29 IN A 151.101.9.147

    >;; Query time: 480 msec
    >;; SERVER: 10.172.11.45#53(10.172.11.45)
    >;; WHEN: Tue Mar 27 20:32:43 JST 2018
    >;; MSG SIZE rcvd: 124

    我们可以看到第14号表示某服务器将wangyue.ml 解析到了xfdywy.github.io.,再 进一步又解析到了sni.github.map.fastly.net., 最后又解析到了 151.101.9.147. 可以看到前面两次都是解析到另一个域名(被称为 CNAME:规范名称记录(Canonical Name)),最后一次解析到了一个确定性的IP地址(被称为A:地址记录(Address),返回域名指向的IP地址。)。常见的dns类型记录有:

    我们今天只用到CNAME

2 申请域名

这一步就是实际操作啦。申请域名当然去哪都行。这里提供两个,一个是国内的阿里云,一个是国外的freenom 。 操作大同小异,都是

  1. 注册账号,登录
  2. 搜索并找到可用的域名,买下来(阿里云里面有一些挺便宜的域名。freenorm里面有一些收费的,也有挺多免费的,都是顶级域名,就是xxx.xxx 这种)
  3. 这一步就结束啦。买下来的这个域名就属于你自己啦。例如wangyue.ml

3 dns解析

想要在浏览器里面输入 wangyue.ml 就能跳到这里。必不可少的一步就是要告诉全世界的电脑,这个域名现在指向这个地方啦。而这一步就是由 dns服务器来负责的。我们需要做的就是将wangyue.ml 与固定的ip地址绑定起来(A),或者是与某已有域名绑定起来(CNAME).

下面我们以freenorm购买的域名为例,实现一个域名绑定多个域名,这样我们就可以实现国内访问托管在coding上的blog,国外访问托管在github上的blog。这里默认大家已经在coding和github上托管好自己的blog了。也就是说,可以用 username.github.io 和 username.coding.me 访问自己的博客了。

  1. freenom 买完域名之后,freenom提供了一个dns解析的服务。但是因为freenom的dns解析在国内可能不是很流畅,我选择cloudXNS 来做dns解析(真的不是打广告。。。。国内的也可以试试腾讯的dnspod) 。在这之前,我们需要把这个域名的控制权从freenom 交到 cloudXNS 的手上,方法就是按照 cloudXNS 提供的 dns server 地址,填到freenom的设置里面。具体操作流程为:

    购买完freenom后,从freenom首页,点击services -> my domain -> manage domain -> Management Tools -> Nameservers -> Use custom nameservers (enter below) -> 填入 cloudXNS 的 dns server地址

    如果你找不到my domain , 请确认你是不是登录了。

  2. cloudXNS的 dns server 怎么获取 : 同理。登录cloudXNS之后,选择 管理控制台 -》 我的域名 -》 添加域名,填写你刚刚在freenom购买的域名,这个时候提示域名未接管,然后会告诉你server地址是多少,怎么操作。

  3. 等待一段时间,大约1~5分钟。等待接管。

  4. 等到cloudXNS 接管状态显示已接管的时候,点击域名进行管理(以下假定购买的域名是wangyue.ml)。添加记录。

    1. 主机记录这里空着的话,表示这条记录解析的是 wangyue.ml , 如果写www, 表示这条记录解析的是www.wangyue.ml 。 剩下的同理
    2. 记录类型填A的话,后面的记录值填写IP地址。这种情况一般适用于自己买了虚拟主机,分配了一个固定 ip,然后直接解析到那个ip就行。我们这里选CNAME,解析到原始域名。(即wangyue.ml 解析到 xxx.github.io 这种)
    3. 然后在线路类型选全网默认,然后记录值填xxx.coding.me(记得把xxx换成自己的…..).然后保存就好。
    4. 到上一步,我们就算已经把我们新买到的域名解析到原始的域名了。为了实现国外用户访问托管到github的博客,我们再同样添加一条记录,只不过线路选择海外默认,记录值填xxx.github.io
    5. dns 服务器端的设置就算完全结束了。下面我们需要分别到github和coding上去设置,使得我们能用新地址访问他们。(这里完全是因为github和coding的设定因素,如果你是绑定到自己的服务器的ip上去,到了这一步就已经完全结束了,可以跳过下一节)
  5. 注意,dns设置不是即时生效的,不同地方需要不同的时间,有时候几分钟就好了,有时候要一晚上一天。总之设置好去睡一觉,第二天来看应该就没问题了。不过别忘了继续往下看,下面的也很重要。

4.github和coding的设置

可能是从安全的角度和服务器负载的角度,github和coding要求自定义域名绑定的时候还要分别在自己的网站上设置一下(前半句我完全乱猜的,后半句是真的 ,认真脸)

coding的设置

首先你需要是银牌会员,个人信息填完全了就自动是了。

进入到你托管博客的那个项目,然后点page 服务, 自定义域名 ,填上 wangyue.ml. 搞定。

github的设置

进入github你托管博客的那个项目,点setting,GitHub Pages ,Custom domain , 输入wangyue.ml,点save。暂时搞定。

为什么说暂时搞定呢,因为你仔细看你github的这个repository, 你会发现一个叫做CNAME 的文件出现在根目录下,里面只有一行,就是 wangyue.ml . github 需要依赖这个文件来让你用自己的域名来访问你的blog。

但是 问题出现在,你每次部署blog之后,就是hexo g hexo d 之后这个文件都会消失。因为你本地目录下并没有这个文件,所以要想办法让hexo编译的时候就生成这个文件。

但是 问题出在hexo编译都是md文件,而且会渲染成html文件。那么怎么办呢。

5.github CNAME 文件

答案就是你把github生成的CNAME 文件放一份到你的 you blog/source/ 文件夹下,或者自己手写也行,注意文件名没有后缀,就叫CNAME, 文件内容就写你的域名 wangyue.ml

然后,最最关键的一步,你要去你blog的根目录下,修改 _config.yml 文件。

1
skip_render: CNAME

之后就愉快的

1
2
3
hexo clean
hexo g
hexo d

再次提醒注意,dns设置不是即时生效的,不同地方需要不同的时间,有时候几分钟就好了,有时候要一晚上一天。总之设置好去睡一觉,第二天来看应该就没问题了。

至此,大功告成