CentOS 7 默认带的openssl是1.0.1版本,开启HTTP2则必须升级1.1左右的版本。
本文仅适用CentOS7
以下为升级全过程
升级OpenSSL
查看当前openssl版本
|
|
查看输出版本
前往Openssl官方(戳我)查看最新的openssl版本,make本文的时候最新版本为1.1.0f
下载并解压
|
|
动态编译Openssl,并安装
|
|
这里要注意,如果编译的时候增加了 zlib-dynamic
这个参数代表了动态编译,编译完成后,只需要执行下文中#添加libssl.so.1.1
等两个步骤,因为openssl的执行目录和文件都已经就绪。
如果用默认的安装,那么此刻openssl默认被安装到了/usr/local/
目录。
查看目前运行的Openssl目录
|
|
开始升级(如果动态编译,可以从#添加libssl.so.1.1
开始)
|
|
至此,openssl已经成功升级。
升级Nginx支持HTTP2
升级
Nginx的升级相对比较简单
升级前最好检查
下是否具备编译Nginx的条件,特别是以前很多采用YUM
安装的懒癌晚期,可能没安装编译环境:
|
|
以上基本把所需的依赖都装好了,如果在下面的编译环境中提示Peal
的相关错误,可以考虑安装cpan
,用cpan按照提示安装缺少的peal库。
开始升级
|
|
最新稳定版本是1.10.2
官网地址:http://nginx.org
升级步骤
|
|
如果遇到错误,请参考本博客上篇文章,用YUM升级安装nginx到最新版本nginx,再进行编译。
配置部分
在nginx的conf
文件里,对对应的站点进行配置,非常简单,只需要增加ssl http2;
即可,比如说:
|
|
要验证http2是否生效可以安装个chrome插件HTTP/2 and SPDY indicator
,如果开启了h2,那么会有一道蓝色的闪电,比如说,就像本站已经开启了:
推荐的配置
这里有个网站推荐给大家,可以生成被优化推荐的Nginx配置文件
一些测试
除了上面提到的Chrome插件以外,如果服务器的openssl版本过低,可能导致chrom浏览器访问失败,原因是因为在去年google chrom51版本中google移除了NPN,只支持ALPN,所以导致协商失败。
用这条命令可以测试目前HTTP2服务是否支持ALPN
|
|
如果提示 unknown option -alpn
,说明本地的 OpenSSL 版本太低(可通过 openssl version
查看),请升级到 1.0.2+。如果不方便升级,也可以使用 Qualys SSL Labs’s SSL Server Test 这个在线工具来测试。
如果结果包含 ALPN protocol: h2
,说明服务端支持 ALPN,不受 Chrome 51+ 去掉 NPN 的影响。
如果结果包含 No ALPN negotiated
,说明服务端不支持 ALPN,在 Chrome 51+ 中无法协商到 HTTP/2,需要尽快升级。