IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Ghost+Nginx部署HTTP2

前端观察 2016-02-07 14:08:33 累计浏览 2,246 次
本机暂存

SPDY的时代就一直想要折腾下,主要是被运营商劫持的太恶心了。而避免被运营商劫持的最佳方案就是部署https。

SPDY还没有大规模使用,HTTP2就来了,于是就开始等nginx支持。

然后最近一直被热姐BS:你怎么还没有搞https啊?这个家伙无聊的搞了个网站叫https://youqu.us,用上了免费的国产SSL证书,于是各种得瑟~~

好吧,了解了下时机已经成熟,于是就开始部署。

SSL证书

SSL证书免费的收费的各种各样,看的头大,于是决定尝试使用Let's Encrypt的免费证书,最近很火的一些知名互联网企业包括google、mozilla、思科等联合支持的服务。昨天晚上申请,今天早上就通过了。

于是按照他们的介绍来自动化部署,开始还挺顺利的,到最后域名验证不通过。。。搜索了下是因为DNS的问题,我用DNSpod的服务,然后貌似hichina、cloudxns的DNS也都会有问题,换DNS的话。。。太麻烦,放弃。

既然部署https/2的目的就是防止被运营商劫持,那么买最便宜的comodo private SSL证书就够用了。

安装证书什么的很简单,网上一搜一大把,就不多介绍了。

Ghost

本身Ghost并不需要怎么配置的,因为我是用了Nginx做代理,所以只需要Nginx去监听443端口就可以了。

嗯,配置需要简单改一点,url那里加上urlssl就可以了:

...
    production: {
//        url: 'http://www.qianduan.net',
        urlssl: 'https://www.qianduan.net',
...

Nginx

安装

之前主要是在等nginx支持http2,而之前的消息是nginx在年底前会支持到,其实在10月份的1.9.5版本就开始支持了,只不过是mainline版本,而不是stable版本。

只是,一般服务器系统安装的nginx都是stable版本(现在是1.8),那么要用到mainline版本就要自己编译一个,还是略麻烦的。Nginx也有介绍直接安装mainline版本的方法:http://nginx.org/en/linux_packages.html#distributions ,根据自己服务器按介绍来配置就好了。

配置

和http监听80端口相比,Nginx配置简单变了下,不麻烦,根据Ghost官方的方法配置就好了:

server{  
        listen 443 ssl http2;
        server_name www.qianduan.net;

        ssl on;

        charset utf-8;
        ssl_certificate        /path/to/your/domain.crt;
        ssl_certificate_key    /path/to/your/domain.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


        location / {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   Host      $http_host;
                proxy_set_header X-Forwarded-Proto $scheme;

                proxy_pass         http://127.0.0.1:2368;
    }
}

注意,要用http2,在第二行ssl后面要添加进来,nginx不会默认使用http2的。

到此为止,主要的配置就完了。

分别重启下ghost和nginx:

原图已失效

嗯,https已经可以访问了,而且也已经有证书信息了。

等等,好像哪里不对?!

  • 地址栏的https不是绿色的;  

  • connection信息第二项的锁形图标带感叹号?

这主要是因为页面里面有一些非HTTPS的mixed content

原图已失效

这样浏览器也会认为页面不是绝对安全的,chrome不允许mixed content执行,比如js,从截图可以看到,最下面的那条被block了,而图片等是可以显示的,只会有黄色的告警。而Safari却允许mixed的js执行,从而有可能被运营商利用来劫持iPhone用户(事实上运营商真的是这样干的!)

比较郁闷的是,普通的SSL证书是单域名的,也就是说,仅支持qianduan.net和www.qianduan.net,而不支持各种子域名——野卡(wildcard ssl)才支持子域名。而前端观察网站的大量图片是放在img.qianduan.net子域名上的。

最开始考虑用代理或者重定向来将请求变成https。后来和热姐讨论,感觉不行。。。

最后突然想到Ghost有导出和导入json的功能!于是后台导出所有数据为json文件,sublime批量替换img.qianduan.net为//www.qianduan.net/img/  T T

然后nginx加一条规则alias img目录就好了。。。

location /img/ {  
    alias /path/to/img/;
}

搞定~~

HTTP跳转

剩下http访问时跳转的问题,有很多种方法,我的配置:

server {  
    listen       80;
    server_name  qianduan.net www.qianduan.net;
    return 301 https://www.qianduan.net$request_uri;
}

效果:

原图已失效

现在浏览器中还看不到是否是基于http2传输的,chrome有个插件,可以在地址栏加个闪电的图标,鼠标放在上面会提示"HTTP/2 enabled":

原图已失效

总结

整个过程其实没啥困难,主要是2点:1.证书;2.httpd软件支持。

具体访问速度,并没有感觉什么变化。

另外,大部分证书(SHA-2)不再支持 IE6 和android 2.3。商业用途时,还需要考虑证书的兼容性。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,164)
  2. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,895)
  3. HTTPS, SPDY和 HTTP/2性能的简单对比 (累计阅读 17,436)
  4. 记录一个软中断问题 (累计阅读 16,953)
  5. 解析nginx负载均衡 (累计阅读 16,622)
  6. server日志的路径分析 (累计阅读 11,239)
  7. Nginx模块开发入门 (累计阅读 11,168)
  8. 检查nginx配置,重载配置以及重启的方法 (累计阅读 10,895)
  9. Cacti 添加 Nginx 监控 (累计阅读 10,641)
  10. fsockopen 异步处理 (累计阅读 10,341)