偶然看到Chrome将要移除对SPDY的支持,迁移到http/2协议的新闻(Transitioning from SPDY to HTTP/2),不禁想到以前还写了遍Nginx(Tengine)启用 SPDY 支持的博文,不得不感叹谷歌真是不断推荐人类的进步啊。HTTP/2的重要特性完全源自SPDY,具体可见:使用HTTP/2提升性能的7个建议

因为本站一直使用的是Tengine,而在Tengine-2.1.2之前的版本中都是不支持HTTP v2协议的。看到上面的新闻后访问了一下Tengine的官网,发现在2015年的12月31日就发布Tengine-2.1.2,变更列表中就添加了对HTTP v2协议的支持。果断更新到最新的Tengine版本,以便开启http/2支持。

更新Tengine

直接下载最新的Tengine版本,然后重新安装即可。只是Tengine默认没有开启对HTTP/2协议的支持,需要在编译的时候加上--with-http_v2_module,下面是我编译时的脚本片段:

./configure --prefix=/usr/local/nginx \
--user=www-data \
--group=www-data \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_spdy_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-http_concat_module

修改nginx.conf

Tengine的特性介绍中说明了,Tengine同时支持HTTP v2协议和SPDY v3协议,可同时使用两种协议;

listen 443 ssl http2 spdy default_server;

当你修改完成重启Tengine之后,你可能会和我一样,使用Chrome浏览器访问网页时遇到ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY的错误,这时可能是你的配置不对,参考这里修改一下你的配置:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers   on;

测试结果

当你修改完成之后肯定想验证一下是否正常启用http2,这篇博文介绍了多种检测的方法:https://blog.cloudflare.com/tools-for-debugging-testing-and-using-http-2/,最简单的是直接使用在线的检测工具:https://tools.keycdn.com/http2-test
下面是本站测试的结果:

下面是ssllabs测试的结果:

可能是心理作用,开启http2之后,我这边(深圳电信)确实感觉到网站秒开了。欢迎大家反馈打开本站的时间情况。