前言

按照官方文档配置

listen 443 ssl http2 default_server;
server_name www.xlxbk.cn;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_certificate      /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.pem;
ssl_certificate_key  /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.key;
ssl_session_timeout 60m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_session_tickets on;

发现缺少ngx_http_v2_module 开启http2需要openssl库的版本在1.0.2以上、nginx 1.10以上

升级OpenSSL

下载最新版的OpenSSL库编译安装

wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f
./config --prefix=/usr/local/openssl
make && make install

替换旧版本库

mv /usr/bin/openssl  /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#链接新库文件
ln -s /usr/local/openssl/lib/libssl.so /usr/local/lib64/libssl.so
ln -s /usr/local/openssl/lib/libcrypto.so /usr/local/lib64/libcrypto.so
#检查更新后的openssl依赖库是否是1.1.0f
strings /usr/local/lib64/libssl.so | grep OpenSSL
#显示结果表明已升级到最新版本链接库
OpenSSL 1.1.0f  25 May 2017
#配置openssl库文件的搜索路径
echo '/usr/local/openssl/lib' >> /etc/ld.so.conf
#使修改后的搜索路径生效
ldconfig -v
#查看openssl版本,结果显示升级成功
openssl version
OpenSSL 1.1.0f  25 May 2017

编译Nginx

./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-openssl=/home/soft/openssl-1.1.0f && make

注意:–with-openssl=…这里是你的openssl解压包的路径

替换Nginx

关闭Nginx

cd /usr/local/nginx/sbin && ./nginx -s stop

移动编译好的nginx到原有的nginx

cp ./objs/nginx /usr/local/nginx/sbin/

启动nginx

cd /usr/local/nginx/sbin && ./nginx

查看网站是否启用http2.0
打开浏览器开发者工具(F12)
浏览器开发者工具
右键name(名称),勾选protocol(协议)
浏览器开发者工具