将基于Github Pages的自定义域名博客迁移到HTTPS
文章目录
越来越多的网站和个人博客都变成 HTTPS ,而自己的博客一直都是用的是 HTTP 协议,作为一个具有强迫症的人,每次用 Chrome 浏览器打开个人博客时看见浏览器地址栏显示的 都感觉很不舒服。趁着前段时间不太忙,将个人博客从HTTP
迁移到了HTTPS
,先记录下。
一开始我想直接通过在 GoDaddy 上直接购买HTTPS
服务来实现,去官网查看后发现费用太高,一年大约100美刀,果断弃之。 Google后发现很多人都用Cloudflare通过转发请求来实现HTTPS
访问,操作起来也很快,自己便也采用Cloudflare
实现, 本文主要是基于Cloudflare
的实现说明。
操作过程
给博客添加自定义域名
本人使用的是GoDaddy
来设置自定义域名,具体操作请参见 利用GoDaddy配置自定义域名, 核心的操作就是给CNAME 文件添加Github Pages
给出的两条A记录IP地址,此处不再详述。
利用Cloudflare修改DNS服务器
- 打开
Cloudflare官网
注册一个Cloudflare
账户。注册成功之后,点击页面右上角的add site 链接,添加一个网站,在下图输入框中输入自己的域名,点击 Begin Scan 按钮开始扫描。
- 扫描完毕后点击 Contiue Setup ,在类似如下图所示的界面中选择Free Website,然后点击页面底部的Continue按钮。
- 在下图所示的Cloudflare Nameservers说明界面中根据要求来修改自定义域名的DNS服务器。
- 登录
GoDaddy
,打开响应域名的Manage DNS界面,将Nameservers从Default修改为Custom 然后添加前一个步骤中的两个值分别加上并点击保存。
- 回到
Cloudflare
网站,点击Overview按钮,查看域名的状态是否为如下所示的Active,若是则表示DNS服务器修改成功,若不是 Active请等待几分钟。
Cloudflare中开启HTTPS设置
- 在
Cloudflare
网站上点击顶部的Crypto按钮,将状态修改为Full。
- 在顶部切换到Page Rules界面,点击Create Page Rule ,添加规则
http://lucumt.info/*
并选择Always Use HTTPS来强制该域名下的所有请求都是用HTTPS
实现,然后点击Save and Deploy来部署该规则,注意此处的规则是HTTP
而不是HTTPS
。
执行完这一步后理论上通过HTTPS
可以正常的访问个人博客,但还需对博客源码做一些修改。
将代码中所有HTTP修改为HTTPS
在执行完前面的步骤后,在浏览器中用HTTPS
访问个人博客时,可能看到的还是而不是自己期望中的小绿锁,同时浏览器控制台可能会出现类似Mixed Content,The page at ...,The request has been blocked,the content must be serverd over HTTPS
的错误信息。其原因是由于某些页面中存在混合内容,即部分请求还是以HTTP
方式实现的,如加载 JavaScript
,CSS
等,解决方法也很简单,将所有的HTTP请求都改为HTTPS即可 。
以我个人基于Hugo的博客为例,要进行如下几步操作:
-
将个人
Hugo
源代码中所有的HTTP
请求都修改为HTTP
,包括页面中的直接请求和JavaScript
、CSS
等文件中的间接请求。 -
利用
hugo server -D --baseUrl="https://lucumt.info" --appendPort=false
重新生成基于HTTPS
的源文件页面。将生成的博客源代码重新上传到 Github 仓库中,经过1分钟左右以
HTTPS
的方式在浏览器中打开个人博客,期待中的小绿锁入愿出现,世界终于和谐了!
注意事项
通过Cloudflare
虽然可以快速的将自己的个人博客迁移到HTTPS
,但基于以下两个方面的原因,在条件许可的情况下还是应该使用其他方式实现HTTPS
:
免费计划下的
Cloudflare实际上相当于一个中介,我们的访问请求先被
Cloudflare代理实现
HTTPS 接收到然后将其转发给原始的服务器(如 Github Pages 服务器)。虽然浏览器与Cloudflare
之间的通信是HTTPS
加密,但是Cloudflare
与实际服务器之间的通信不一定是加密的,存在被挟持和篡改的可能。Cloudflare
之前也被爆出过 安全漏洞和敏感数据泄露,故商业网站通常不用Cloudflare
免费计划,但个人博客出于增加搜索引擎收录和省钱等原因,可以使用Cloudflare
免费计划。
- 由于经过
Cloudflare
这层代码,访问速度肯定没有直接访问原始服务器那么快,对于响应速度要求高的用户不合适。 - 由于众所周知的原因,在天朝
Cloudflare
访问速度比国内慢,而且指不定哪天就被ban了。
利用Github Page原生HTTPS
Github
从2018年5月份开始支持自定义域名使用HTTPS
1,具体操作说明请参见securing-your-github-pages-site-with-https,通过此种方式可以绕过Cloudflare
作为中间层的问题,但是仍然无法解决由于qiang存在导致的访问缓慢的问题。
由于自己之前采用的是Cloudflare
,按照Github
的官方文档进行操作时,在进行DNS检查时一开始会提示如下信息
利用dig
命令检查后结果如下
[root@vm-16-6-centos ~]# dig +noall +answer lucumt.info
lucumt.info. 60 IN A 185.199.110.153
lucumt.info. 60 IN A 185.199.111.153
lucumt.info. 60 IN A 185.199.108.153
lucumt.info. 60 IN A 185.199.109.153
[root@vm-16-6-centos ~]# dig www.lucumt.info +nostats +nocomments +nocmd
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> www.lucumt.info +nostats +nocomments +nocmd
;; global options: +cmd
;www.lucumt.info. IN A
www.lucumt.info. 2280 IN CNAME lucumt.github.io.
lucumt.github.io. 2280 IN A 185.199.109.153
lucumt.github.io. 2280 IN A 185.199.111.153
lucumt.github.io. 2280 IN A 185.199.110.153
lucumt.github.io. 2280 IN A 185.199.108.153
[root@vm-16-6-centos ~]#
发现已经切换过来,并且通过浏览器也能以HTTPS
的方式正常访问,就是DNS检查结果一直失败,虽然不影响使用,但对于一个有强迫症的人来说页面上有一项检查失败还是很难受的。
给Github
官方发送Support Request后很快收到了回复2,原因为Cloudflare
的缓存还没有清除干净,等待2-3后即可恢复正常。
$ dig NS lucumt.info
; <<>> DiG 9.10.3-P4-Debian <<>> NS lucumt.info
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9195
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;lucumt.info. IN NS
;; ANSWER SECTION:
lucumt.info. 23305 IN NS anirban.ns.cloudflare.com.
lucumt.info. 23305 IN NS angela.ns.cloudflare.com.
;; Query time: 0 msec
;; SERVER: 10.127.5.10#53(10.127.5.10)
;; WHEN: Thu Jan 19 18:28:08 PST 2023
;; MSG SIZE rcvd: 100
根据官方人员的反馈等待2-3天后再次检查,发现DNS检查通过!
参考:
文章作者 飞狐
上次更新 2017-12-24