我的博客用上HTTPS啦

  Hexo(或者其它静态网页生成框架)+GitHub一直被认为是博客神器,原因就是,很多IT Geek都有自己的个人博客网站,而且绝大多数的博主都有这几个博客迁移过程:

  • 寻找国内或者国外的免费空间,用提供商的免费三级域名,但是免费也是有条件的:要不不允许绑定自定义域名、要不需要在网站显眼的地方贴出商家广告、要不每个月访问量或者更新量不足就会被关闭。
  • 然后感觉限制太多了,就用起来付费的空间写。商家把LAMP环境给你弄的妥妥的。
  • 然后你玩的多了,发现空间价格贵、限制多,自己没折腾的不好玩,于是自己入手一个VPS,从头搞自己的博客系统。
  • 然后,你可能不小心丢过几次数据,可能各种原因在各家VPS供应商迁移来迁移去,或者被定期备份事情烦扰着……
  • 最终,你就想着要是别人把这些运维、备份等都给做好,我自己只关心写文章,而且最好是免费的,该多好啊!

  基本上面的路我都走过,我相信很多人也有同样的经历。其实,很多事都有类似的过程,基本都是刚开始从懵懂,再到激情满满,再到最后变懒不想折腾。个人感觉这是成长的过程吧,刚开始什么都想折腾,最后感觉精力有限,把这些繁琐无聊的事情“外包”出去,让自己专心于自己喜欢的或者核心的事情,岂不快哉!

  GitHub Pages其实最初是用来托管项目的主页或者项目的文档用的,所以当初就有人在论坛上提问在GitHub上搭建个人博客是否道德?,下面也提到了:

Create a blog and spread your ideas. Whatever you want!

  所以开源世界是很宽容的,即使你的博客会占用他们的空间和带宽,但是只要你能分享你的东西,都可以免费使用GitHub服务,而分享的形式不限与代码哦。

GitHub搭建博客的优点:

  • GitHub帮忙运营,稳定性有保证。
  • 当初GitHub被封后,然后在程序员的抗议之下被解封,所以“中国特色稳定性”安全系数较高!
  • 继承Git的特色,本地保存了完整的repo内容,可以方便部署到任意一台服务端。
  • MarkDown语法,简单整洁,即使本地渲染,效果也很好。
  • 一次配置设置之后,就可以一劳永逸的写文章了,可以愉快的玩耍啦!

GitHub搭建博客的缺点:…

  • 由于是静态的,所以相比WordPress功能不够强大,所以有些内容(比如社交评论)需要第三方插件。
  • 可以绑定自定义域名(包括顶级域名和二级域名),但是不支持HTTPS加密传输。
  • 目前用的Hexo插件还不是很多,如果对框架不熟悉,修改会很费劲。博客发布前需要生成静态页面,比较麻烦。
  • 由于传输是非加密的,所以会被防火墙审查,国内访问速度偏慢。
  • 由于非加密的,而且不是独立站点,所以搜索引擎排名会很差。

  当然,这次主要是针对后面两个缺点考虑的。所以在自己的VPS上面,搭建了一个Nginx做反向代理,就可以用HTTPS加密传输了:

  • 将域名freesign.net指向VPS的IP地址;
  • 删除仓库的CNAME文件,此时只能用taozhijiang.github.io来访问;
  • 在Nginx添加主机,设置反向代理到GitHub Pages地址;

  这样,就可以用freesign.net域名来访问博客了。HTTPS加密是没有问题,Google排名可能过一段时间才能看到效果。

  后续的玩点还很多,比如手头有几个阿里云的肉机,可以也在上面开代理,然后DNS用智能DNS解析,就实现了CDN的效果,不过站点太小,懒得折腾了。

  最后附上一个可用的Nginx服务器配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server {
listen 80 default_server;
server_name freesign.net;
access_log /var/log/nginx/freesign.access_log;
error_log /var/log/nginx/freesign.error_log;
return 301 https://freesign.net;
}

server {
listen 443 default_server;
server_name freesign.net;
ssl on;
ssl_certificate /etc/ssl/1_freesign.net_bundle.crt;
ssl_certificate_key /etc/ssl/2_freesign.net.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options DENY;

access_log /var/log/nginx/freesign_ssl.access_log;
error_log /var/log/nginx/freesign_ssl.error_log;

client_max_body_size 4m;

location / {
proxy_pass http://taozhijiang.github.io;
proxy_redirect default;
proxy_buffering off;
#proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_pass_header Set-Cookie;
}
}

  2016年03月11日更新: 个人的相册上线啦!挑了很多,发现这个ImageVue效果不错,而且不用挂数据库,备份和迁移都比较的方便,但是为商业软件,授权费用大概40刀,等我财务自由了,一定支持一下。
  PS:这个域名确实比较的挫,但是新建一个域名需要重新颁发证书,比较的麻烦,就凑合着用吧。

  2016-04-04更新:个人的网站已经关闭了VPS反向代理,所以博客的访问域名为https://taozj.org,个人相册的访问域名为https://album.taozj.org
  其中的缘由,直接是因为博文要写数学公式,而mathjax在nginx反向代理后无法解析,但是直接访问原网站却是正常的,所以就觉得把这层代理给关掉了。然后,我的相册也从VPS上面撤下来了,目前放在RedHat Cloud的openShift上面的,也是本地更新,然后用git推送到服务器上面的,同时关于RedHat,我记得在我上大学的时候是不能访问的,但是别人一说现在突然能访问了,估计是数据中心迁移到Amazon的原因吧。
  目前自己的博客、相册、网盘这类东西,都是去中心化的产品,即使远程服务器无法访问,本地也有一份完整的备份。目前看来,互联网服务的最大风险不在于Service Provider的运营水准,而在于因为违反相关法律规定而无法访问。无言~~~
  此外,如果之前访问过小站而再次访问自动跳转到https协议的话,可以打开chrome的chrome://net-internals/#hsts,然后把freesign.net条目清除就可以了。

  2016年12月8日更新:Wosign和其马甲StartSSL的免费证书已经被主流的Chrome和Firefox拉黑了,现在使用的是腾讯云签发的免费赛门铁克单域名证书(虽然七牛、阿里云也提供免费赛门铁克证书申请,但是不提供证书下载,差评)。今后HTTPS必定成为主流,还有一些不可明说的秘密,以及HTTP内容在传输过程中被劫持篡改等因素,建议大家在web server上面开启HSTS机制,让之前已经访问过的浏览器之后能够自动强制进行https访问。不过一旦开启之后你的网站必须一直支持https访问,撤销这个机制是一件非常麻烦的事情。

1
2
3
4
// nginx
add_header Strict-Transport-Security "max-age=2592000; includeSubDomains; preload" always;
// apache
Header always set Strict-Transport-Security "max-age=10886400; includeSubdomains; preload"

本文完!