当你的网站支持 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,那么浏览器就会使用该协议,有个协商的过程。
麻烦在哪儿
OpenSSL 1.0.2
以上的版本才支持 ALPN,但是现在的主流 Linux 发行版内置的 OpenSSL 版本并没有这么高,比如我的 VPS 是 Ubuntu 14.04 LTS,它默认的 OpenSSL 版本是 1.0.1f
。那么怎么办呢?
第一种方法是升级操作系统,这个对我来说比较麻烦,所以就放弃了。另外个方法就是重新编译 Nginx 和 OpenSSL,选择最新版本。
源码编译安装 Nginx 支持 HTTP/2
wget
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
}
看看 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 --http2 -I
curl: (1) Unsupported protocol
最后,在你看我网站的时候并不支持 HTTP/2,因为还有好多事情没有做,这也只是入门文章,很多细节没有说。