论我为什么霸气的从https切换回http

    先介绍一下我的上下文,我的博客是http的模式,但是想做成https安全加密的模式,就图个帅气。 话说博客类的网站很少有人用使用https。 据说google 会针对https的网站加一些权重,可提高你的命中几率,然后我居然信了。 对于证书的申请, 我不可能花钱去买,这里有两个选择,startSSL和let’s encrypt ,他们都是免费的,可以搞定绝大数的浏览器授权。唯一所谓的麻烦就是需要自己续签下,对于你来说也只是一行命令而已。


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新.

http://xiaorui.cc/?p=3577


Let’s Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。

let’s encrypt 证书使用过程我就简单的过一下,总的来说没什么难的. 


创建申请证书

#xiaorui.cc

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --standalone --email rfyiamcool@163.com -d xiaorui.cc

中间碰到这个页面就说明你已经OK了…


你可以在 /etc/letsencrypt 目录下看到你生成的证书.

ll /etc/letsencrypt/live/xiaorui.cc/fullchain.pem
ll /etc/letsencrypt/live/xiaorui.cc/privkey.pem

letsencrypt的证书是90天,也就是说 90天之后就失效了, 你可以再次续约.

./letsencrypt-auto --renew certonly --email rfyiamcool@163.com -d xiaorui.cc

到此为止,证书已经申请完毕,我们需要配置nginx引用这些证书。 

在签发证书的时候,记得关闭nginx,或者其他占用80端口的服务。 因为letsencrypt自己会起个服务做临时的认证,当证书下发后,你就可以再次启动nginx了。 


下面是Nginx ssl证书的主要配置片段 

 如果你是直接使用web框架,配置的过程是一样的

#xiaorui.cc

server {
    listen 80;
    server_name xiaorui.cc *.xiaorui.cc;
    return 301 https://hostrequest_uri;
}

server {
    ssl on;
    listen 443 ssl;
 
    ssl_certificate /etc/letsencrypt/live/xiaorui.cc/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xiaorui.cc/privkey.pem;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    index index.php;

到这里已经已经实现了你网站的证书配置, 看到这里才是我们正题的开始,也就是说  我为什么又撤回到http的模式。 


遇到的问题


情况不是很美好,当我打开 xiaorui.cc 主站的时候,发现没有小绿锁,看到那提示我就知道网站引用的链接不仅仅有https的,还有http的。 那怎么办?  只能把这些能改的都改掉。   首先把cnzz这个代码统计改成https模式的,百度广告联盟也改成https的,但最后剩下这多说让人很是苦恼。 多说作为国内头号社会化评论选手居然https兼容性这么差。  对于头像来说,他只能使用外链的方法,他在接口里也没有设置的地方。 最后通过多说插件的源码来实现的头像img的https.   原理很简单,外链不再是直接访问,而是通过我后端的nginx去转发。   勉勉强强算是解决了。

再让我们解决cdn的问题,我用阿里云的cdn已经有一年的时间了,在使用阿里云配置全站https的时候,出现了网站调试不同的问题。 最后解决方法是在博客里切域名,静态的文件在一个static.xiaorui.cc域名里。  static是xiaorui.cc的二级域名,倒不用重新独立证书。

seo,seo,seo…. 
我主要测试了google baidu 爬虫的https测试,结果令我满意,是可以抓取的.  但是百度抓取https时不时出问题,而且有点慢… 他的耗时居然比google的都要多,这不科学。  我的解决方法是在nginx 做ua的判断,如果看到是爬虫的ua就访问80的数据,非爬虫的ua就转跳到443 https.

#xiaorui.cc
    listen 80;
    ssl on;
    listen 443 ssl;
    set flag 0;
    setmark 0;
    if (  server_port = 80 ) {
       setflag 1;
    }
    if ( http_user_agent !~* "Baiduspider|Sogou web spider|Googlebot|bot|JianKongBao" {
       setflag  flag+1;
    }

    if  (flag = 2 ) {
       return 301 https://hostrequest_uri;
    }

性能问题, https是消耗性能我是知道的,但上了一段时间的https之后,发现有变慢。  更换了nginx ssl优化组件后有些提升,但提升不大. 

头像连接失效, 原始评论会记录头像的连接,有不少连接更换成https之后无法访问。  多说里面自带了用户访问痕迹,由于https之后,也是无法访问。

我终于明白为什么有人不用多说评论,而是采用Disqus来实现社会化评论。 越想越蛋疼, 真想滚回http….

更换成https后,出现了访问慢和一些外链的头像和照片无法访问。 越来越觉得没必要因为https这个安全第一的需求,花时间解决这些问题…. 

最后,取消https,滚回http… 

END. 


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

5 Responses

  1. 123 2016年12月5日 / 下午2:15

    111111111

  2. sucan 2016年8月1日 / 下午2:24

    够折腾的。。。

刘立坤进行回复 取消回复

邮箱地址不会被公开。 必填项已用*标注