HTTP/2介绍
什么是HTTP/2
HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接)[1],是HTTP协议的的第二个主要版本.
为什么不是HTTP/1.2
为了实现 HTTP 工作组设定的性能目标,HTTP/2 引入了一个新的二进制分帧层,该层无法与之前的 HTTP/1.x 服务器和客户端向后兼容,因此协议的主版本提升到 HTTP/2。
HTTP/2发展背景
起初是Google 2009年中旬开发的一个SPDY实验性协议,主要目标是通过解决HTTP/1.1 中一些性能限制来减少网页的加载延迟,首次发布后不久Google的两位软件工程师Mike Belshe 和 Roberto Peon 就分享了他们对这个新实验性 SPDY 协议的实现结果、文档和源代码,发现性能的提升特别明显,页面加载速度最高加快了55%,到了2012年,这个实验性协议得到Chrome、Firefox和Opera的支持,越来越多的大型网站(Twitter、Facebook)和小型网站开始部署SPDY,被行业越来越多的采用之后,SPDY已经具备成为一个标准的条件。
HTTP工作组(HTTP-WG)观察到这一趋势后,便将这一工作提上议事日程,吸取 SPDY的经验教训,并在此基础上制定了官方“HTTP/2”标准。在拟定宣言草案、向社会征集 HTTP/2建议并经过内部讨论之后,HTTP-WG决定将SPDY规范作为新HTTP/2协议的基础。在接下来几年中,SPDY和HTTP/2继续共同演化,SPDY作为实验性分支,用于为HTTP/2 标准测试新功能和建议。理论不一定适合实践(反之亦然),SPDY提供了一个测试和评估路线,可以对要包含到HTTP/2标准中的每条建议进行测试和评估。到2015年初,IESG审阅了新的HTTP/S标准并批准发布,之后不久,Google Chrome团队公布了他们为TLS弃用SPDY和NPN扩展的时间表(也就是2016年初),从此Google服务器开发转向HTTP/2,SPDY就此退出历史舞台。
Nginx配置HTTP/2环境
前提
(1)、Nginx 1.9.5版本支持HTTP/2,TLS扩展支持仅在OpenSSL版本1.0.2之上,为此先升级OpenSSL版本。
(2)、HTTP/2是加密传输,需要Nginx开启HTTPS模式,开启HTTPS就需要申请配置SSL证书。
升级OpenSSL版本
(1)、下载源码包编译安装1
2
3
4
5
6
7
8
9
10
11cd /tmp
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar -xvf openssl-1.1.1a.tar.gz -C /usr/local/src/
cd /usr/local/src/openssl-1.1.1a
./config
make && make install
(2)、配置最新OpenSSL环境
把旧版本的openssl重命名1
2mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
设置软连接指向刚编译好的新版本的openssl-1.1.1a1
2ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
添加libssl.so.1.1的软链接1
2ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
查看openssl版本1
openssl version
安装Nginx HTTP/2环境
nginx -V 查看configure编译参数
1 | cd /tmp |
make执行完不需要在执行make install命令,不然当前Nginx配置环境会被覆盖安装成默认
重命名Nginx安装目录下的二进制文件1
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
从刚刚编译过的源码包中拷贝Nginx二进制文件到Nginx安装目录下1
cp objs/nginx /usr/local/nginx/sbin/
检测Nginx环境是否有错误1
/usr/local/nginx/sbin/nginx -t
Nginx环境检测显示success打印信息就重载Nginx服务1
/usr/local/nginx/sbin/nginx -s reload
完成后查看Nginx版本与参数是否添加成功1
nginx -V
配置HTTP/2
配置Nginx vhost
1 | server { |
验证HTTP/2是否配置成功
(1)、在终端输入curl -I -k --http2 https://example.com
; 显示HTTP/2.0则为开启成功
(2)、安装chrome插件HTTP/2 and SPDY indicator,插件显示蓝色闪电则为HTTP/2开启成功
优化Nginx SSL配置
访问https://mozilla.github.io/server-side-tls/ssl-config-generator/
,选择对应的Web Server和OpenSSL版本,就会生成相应的配置。