首页 > 技术 > 使用CloudFlare和反向代理实现全站SSL

使用CloudFlare和反向代理实现全站SSL

CloudFlare是一个口碑还不错的CDN服务提供商,支持免费的HTTPS协议代理,可以用来实现自定义域名的github page的ssl访问。关于CloudFlare的配置,可以参考这篇文档

CloudFlare会自动生成SSL证书为你的网站加密,这个证书会和其他托管在的CloudFlare上的一些网站共享。如果需要使用自己的SSL证书,需要订阅$200一个月的Business Website支持,极不划算。

要实现全站SSL,页面上不能引入任何非HTTPS协议的资源,我之前使用了百度的静态库托管和360的google font镜像,这两个都不支持HTTPS协议访问,于是我切换成了支持HTTPS的七牛静态库和gmirror.org的google font镜像。

全站SSL的最后一块拼图是网站使用的多说评论框。多说评论框本身是支持HTTPS协议加载的,但是其中使用的新浪微博的头像却不支持https协议,需要通过一个反向代理,把所有新浪微博的头像的请求转为支持HTTPS协议的。网络上流传的方法都是通过修改多说的源代码实现的,可能会导致多说更新时产生不可预计的问题。我最终选择了使用重写javascript的appendChild函数的方法,在图片元素添加进页面时修改图片的src属性为一个反向代理的地址,实现不不侵入多说源代码的前提下的全站SSL。修改appendChild函数的的代码如下:

1
2
3
4
5
6
7
8
9
$(document).ready(function(){
  var _appendChild = Node.prototype.appendChild;
  Node.prototype.appendChild = function(){
    $(arguments[0]).find("img").each(function(){
      this.src = this.src.replace(/http:\/\/(.*)/,"https://lighthouse.gongshw.com/proxy/http/$1")
    });
    return _appendChild.apply(this, arguments)
  }
})

其中https://lighthouse.gongshw.com/是我实现的一个web代理,关于这个项目的更多信息,烦请移步lighthouse的Github页面

关于HTTPS和SSL的更多信息,推荐阅读阮一峰老师的这几篇博客: