部署 HTTP/2

HTTP/2 是什么?

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0 ),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议。它由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。与 HTTP1.1 完全语义兼容,几乎可以无缝升级。目前主流浏览器都已经支持 HTTP/2 了(IE 自 IE 11 开始支持)。

早些时候,Nginx 曾发布过一个 early-alpha patch 来提供对 HTTP/2 的支持,但从最新发布的 Nginx 1.9.5 开始,httpv2module 已经替换了 ngxhttpspdy_module 并正式开始提供全面的 HTTP/2 支持。

下面说下如何升级到HTTP/2,目前我的nginx版本为 1.10.3 :

升级 OpenSSL

Note that accepting HTTP/2 connections over TLS requires the “Application-Layer Protocol Negotiation” (ALPN) TLS extension support, which is available only since OpenSSL version 1.0.2. Using the “Next Protocol Negotiation” (NPN) TLS extension for this purpose (available since OpenSSL version 1.0.1) is not guaranteed.

官方提到,目前升级 HTTP/2 使用 ALPN,OpenSSL需要在 1.0.2 之上。

1.检查OpenSSL版本

1
openssl version

如果版本不够可以,在OpenSSL下载。

2.下载 OpenSSL 的最新版,当前最新版本为1.1.0e

1
2
3
4
5
wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz

tar zxvf openssl-1.1.0e.tar.gz

mv openssl-1.1.0e/ openssl

3.编译安装

1
2
3
./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib shared zlib-dynamic
make depend
make && make install

4.检查版本

1
2
openssl version
OpenSSL 1.1.0e 16 Feb 2017

Nginx启动HTTP/2

开启HTTP/2也十分简单,直接在指定的域名nginx.conf中配置。

1
2
3
4
5
6
7
8
9
10
server {  
listen 443 ssl http2;
server_name luolei.org;

#SSL配置
ssl on;
ssl_certificate /etc/nginx/conf.d/certificate.crt;
ssl_certificate_key /etc/nginx/conf.d/certificate.key;

}

在listen后面增加http2即可。

注意:不能混用SPDY和HTTP/2,如果你两个都同时开启,会报错。

1
nginx: [warn] invalid parameter "spdy": ngx_http_spdy_module was superseded by ngx_http_v2_module in /etc/nginx/conf.d/vhost.conf:12

配置Nginx

Nginx 配置 http_v2_module 和 http_ssl_module 两个模块,以及最新openssl

1
./configure --with-openssl=.././openssl --with-http_v2_module --with-http_ssl_module

重启nginx服务器

1
service nginx restart

重启服务器之后,打开chrome浏览器,进入网络Network,打开Protocol,看到主域的Protocol已经变了成了h2,这就意味着已经成功升级到HTTP/2。
http2

或者使用Chrome的网络工具,在地址栏中输入chrome://net-internals/#http2

http2

参考资料:

HTTP/2 资料汇总

本博客 Nginx 配置之完整篇

“error while loading shared libraries: xxx.so.x” 错误的原因和解决办法

OpenSSL资源下载

HTTPS, SPDY和 HTTP/2性能的简单对比

HTTPS、SPDY和HTTP/2的性能比较