0%

平滑升级nginx1.14.1以支持http2.0

功能介绍

HTTP/2也被称为HTTP 2.0,是最新的HTTP协议。目前,Chrome、 IE11、Safari以及Firefox 等主流浏览器已经支持 HTTP/2协议。HTTP/2优化了性能,兼容了HTTP/1.1的语义,与SPDY相似,与HTTP/1.1有巨大区别。

SPDY是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩,与HTTP/2相似。

HTTP/2的优势

  1. 二进制协议:相比于HTTP 1.x 基于文本的解析,HTTP/2将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。基于二进制可以让协议有更多的扩展性,比如引入了帧来传输数据和指令。
  2. 内容安全:HTTP/2基于HTTPS,因此天然具有安全特性。通过HTTP/2的特性可以避免单纯使用HTTPS的性能下降。
  3. 多路复用(MultiPlexing):通过该功能,在一条连接上,您的浏览器可以同时发起无数个请求,并且响应可以同时返回。另外,多路复用中支持了流的优先级(Stream dependencies)设置,允许客户端告诉服务器哪些内容是更优先级的资源,可以优先传输。
  4. Header压缩(Header compression):HTTP请求头带有大量信息,而且每次都要重复发送。HTTP/2 采用HPACK格式进行压缩传输,通讯双方各自缓存一份头域索引表,相同的消息头只发送索引号,从而提高效率和速度。
  5. 服务端推送(Server push):同SPDY一样,HTTP/2 也具有客户端推送功能。目前,有大多数网站已经启用HTTP/2,如淘宝。使用Chrome浏览器登陆控制台,您可以查看是否启用 HTTP/2 。

升级HTTP2必要条件

  1. nginx 1.9.5版本以上
  2. nginx基于1.0.2以上版本的openssl编译
  3. 必须支持https

升级openssl

openssl官网地址:https://www.openssl.org/source/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 下载openssl
wget http://www.openssl.org/source/openssl-1.0.2p.tar.gz
tar -zxvf openssl-1.0.2p.tar.gz
cd openssl-1.0.2p
./config shared zlib
make && make install

# 修改历史的OpenSSL文件设置备份
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old

# 设置软连接使其使用新的OpenSSL版本 刚刚安装的OpenSSL默认安装在/usr/local/ssl
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl

# 更新动态链接库数据
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

# OpenSSL版本信息
openssl version -a

升级nginx

nginx官网地址:http://nginx.org/en/download.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载nginx
wget http://nginx.org/download/nginx-1.14.1.tar.gz
tar zxvf nginx-1.14.1.tar.gz
cd nginx-1.14.1
./configure --prefix=/usr/local/nginx --with-openssl=../openssl-1.0.2p --with-http_stub_status_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-pcre --with-http_ssl_module

# 编译nginx
make

# 复制编译后的nginx到原nginx sbin目录下
cd nginx-1.14.1
cp objs/nginx /usr/local/nginx

# nginx平滑升级
make upgrade

配置nginx

配置文件增加以下配置

1
listen 443 ssl http2;