2017.5.23 HTTPS改造手记

Posted by 橙叶 on Tue, May 23, 2017

前几天闲的无聊,就将博客升级为HTTPS连接。说得简单,其实也没少烦心。因为从一开始我就没打算用HTTPS,毕竟HTTPS对服务器资源的消耗不容小觑,而且对访问速度也有一定影响。之前有所尝试,曾经直接在CDN的基础上启用HTTPS访问,但是因为静态文件绝对URL的缘故,多次尝试后未能成功。后来干脆放弃了全站CDN,仅将静态文件托管至CDN,这样一来就相对灵活了。

一句建议:新站能用HTTPS就尽量用吧,时间越久,改造越难,越容易出问题。毕竟HTTPS是大势所趋。

首先需要购买SSL证书,因为经费的缘故,只好暂时使用免费的SSL证书。免费证书仅能对应一个子域名,所以除了主站外,我还需要两个子域名(img.orgleaf.com和static.orgleaf.com)的证书。(这3个证书的认证费了我不少时间,因为OSS不能创建.well-known文件夹,TXT和CNAME记录又冲突,所以申请时只能暂时删除CNAME记录)

动静态分离还有一个好处,就是不需要操心静态文件的问题,直接在插件(我用的是CDN Enabler)中设置即可:

申请后,按照阿里云提供的教程部署,上传证书文件、把相应内容写入NGINX的配置文件,重启NGINX服务。

在启用HTTPS的同时,启用HTTP/2提高访问速度。(需要在编译NGINX时启用http2模块)

再次访问,网页显示倒是没什么大问题,浏览器左上角却没有绿色的小锁。这是因为尚有部分文件使用HTTP链接。没什么好办法,只好打开浏览器的开发者工具——》console逐个排查。最后发现首页幻灯片的图片中仍然使用HTTP URL,还有百度分享的js文件,前者直接在后台修改后就能解决,后者别无他法,只好关掉了这个功能。

现在首页倒是有了小绿锁,但是随意打开一篇文章,小绿锁消失了。因为文章中的图片使用的是img.orgleaf.com这个域名,因为文章内容保存后就基本固定了,所以在后台修改媒体文件URL后也没什么效果。对于这个问题有很多解决方法,比如修改fuction.php或MySQL命令替换,我使用的是后者。

在网站数据库下执行这样一条SQL命令:

update wp_posts set post_content = replace(post_content, 'http://img.orgleaf.com','https://img.orgleaf.com');

后来发现网站的一些字库文件没有加载成功,导致一些图标无法显示。这是因为woff和tff文件的跨域访问被拒绝,仅允许http://www.orgleaf.com进行跨域访问。在OSS跨域访问中将http://www.orgleaf.com修改问https://www.orgleaf.com后恢复正常。

网站内容基本完成了,但是博客毕竟要靠搜索引擎吃饭,于是乎赶紧到各个站长平台提交了HTTPS的改版。

HTTPS的改版需要时间,不能坐以待毙,在NGINX中设置了301跳转和HSTS。最好两个都用,就HSTS的机制来说,HSTS是优先于301跳转的,而HSTS的实际跳转效果不是很好,也不是所有浏览器都支持。

经过一晚上的忙活,HTTPS的改造就基本完成了,现在你可以安全地浏览本博客了!



comments powered by Disqus