迈向HTTPS(三)快速让你的网站支持HTTP2
当你的网站支持 HTTPS 后,这并不是终点,这时候你可以考虑升级 HTTP/1.1 到 HTTP/2 了,至于什么是 HTTP/2 这里就不说了,它是 HTTP/1.1 的升级协议,对客户端和服务器端有极大的性能提升,知道这一点就足够了。
据 2016/05 统计,世界上大概 8% 的站点部署了 HTTP/2。
另外使用 HTTP/2 必须先构建 HTTPS,所以明白了把,Google 大力推进 HTTP/2(包括它的前身 SPDY)也是有原因的,变相等于支持 HTTPS,从而让网络更安全更快速。
这里以 Nginx 服务器来简单说明如何让你的网站支持 HTTP/2 。
ALPN 是什么
一个网站假如同时支持 HTTP/1.1 和 HTTP/2,那么客户端(浏览器)如何知道一个网站(服务器)是不是支持 HTTP/2 呢?这时候 ALPN 协议就发明了,中文名就是应用层协议协商协议,假如浏览器通过这协议知道服务器支持 HTTP/2,那么浏览器就会使用该协议,有个协商的过程。
而 Nginx 是通过 OpenSSL 实现的 ALPN 来支持 HTTP/2 的,简单的说,安装 Nginx 的时候只要选择 --with-http_v2_module
参数就可以了,假如是包安装方式(比如 apt-get)就更简单了。
另外 Nginx 1.9.5 以上的版本才支持 http_v2_module
模块,这一点很重要。安装 Nginx 的时候一定要注意,我自己 VPS 包仓库里的 Nginx 版本就比较低。
麻烦在哪儿
OpenSSL 1.0.2
以上的版本才支持 ALPN,但是现在的主流 Linux 发行版内置的 OpenSSL 版本并没有这么高,比如我的 VPS 是 Ubuntu 14.04 LTS,它默认的 OpenSSL 版本是 1.0.1f
。那么怎么办呢?
第一种方法是升级操作系统,这个对我来说比较麻烦,所以就放弃了。另外个方法就是重新编译 Nginx 和 OpenSSL,选择最新版本。
源码编译安装 Nginx 支持 HTTP/2
wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar -zxvf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
curl http://nginx.org/download/nginx-1.13.0.tar.gz
tar xvf nginx-1.13.0.tar.gz
cd nginx-1.13.0
./configure --prefix = /usr/nginx --with-openssl=../openssl-1.0.2j --with-http_v2_module --with-http_ssl_module
make
make install
修改 nginx.conf
server {
listen 443 ssl http2;
server_name rss.newyingyong.cn;
}
看看 Nginx 编译后的结果
/usr/nginx/nginx -V
nginx version: nginx/1.13.0
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
built with OpenSSL 1.0.2j 26 Sep 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/nginx --with-openssl=openssl-1.0.2j --with-http_v2_module --with-http_ssl_module --without-http_rewrite_module
非常简单把,现在就可以测试下你的网站是否支持 HTTP/2
测试网站是否支持 HTTP/2
一般使用 CURL 命令行来测试,当你运行下面的命令会报错,原因就在于 CURL 版本也要升级,可以参考这篇文章,话说安装还是很麻烦的,不过相信以后会改善的。
curl --http2 -I "rss.newyingyong.cn"
curl: (1) Unsupported protocol
另外一种方法就非常简单了,这儿有个工具,检测下就行,可以看看我的网站结果图:
![http/2][https_2]
[https_2]: http://notes.newyingyong.cn/static/image/2017/https_2.png "http/2"
最后,在你看我网站的时候并不支持 HTTP/2,因为还有好多事情没有做,这也只是入门文章,很多细节没有说。