Nginx上配置http2并解决http2在chrome上不生效。

为什么要使用HTTP2

普通的 HTTPS 网站浏览会比 HTTP 网站稍微慢一些,因为需要处理加密任务,而配置了 h2 的 HTTPS,在低延时的情况下速度会比 HTTP 更快更稳定!废话不多说,下面开始我们最简单的配置http2教程。

要求

  • 已经配置好https
  • Nginx-1.10.3版本(理论上Nginx-1.9.5版本以上都支持)
  • openssl-1.0.2j
  • 测试系统为debian

配置

一、升级openssl到1.0.2j版本
  • 查看openssl原版本

    openssl version
  • 下载openssl-1.0.2j.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
  • 更新安装ZLib
apt-get install libssl-dev
apt-get install libpcre3 libpcre3-dev
  • 解压安装
tar -zxf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
./config shared zlib
make
make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
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 version

当显示的版本号是1.0.2j的时候就代表安装成功!

为什么要升级到openssl1.0.2j?
因为你系统上的openssl版本太低,编译出来的Nginx用的系统低版本的openssl,导致谷歌访问时并不会开启http2

二、重新编译Nginx(Nginx版本>=1.9.5)
  • 先将服务器的nginx关闭,LNMP生产环境下执行:
lnmp nginx stop
  • 找到安装nginx的源码根目录,如果没有的话重新下载相应版本的源码,下载地址:http://nginx.org/en/download.html
  • 查看ngixn版本及其编译参数,复制你已经编译安装好的模块。
/usr/local/nginx/sbin/nginx -V
  • 进入nginx源码目录
cd nginx-1.10.2
  • 执行(在原有的参数上加上--with-openssl=/data/openssl-1.0.2j重编译,如下例:)
./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-openssl=/你第一步下载的openssl的路径/openssl-1.0.2c
  • 然后
make   //千万别make install,否则就覆盖安装了
  • make完之后在objs目录下就多了个nginx,这个就是新版本的程序了
  • 备份旧的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
  • 把新的nginx程序覆盖旧的
cp objs/nginx /usr/local/nginx/sbin/nginx
  • 测试新的nginx程序是否正确
/usr/local/nginx/sbin/nginx -t
  • 重启nginx(LNMP环境下):
lnmp nginx restart
  • 查看ngixn版本及其编译参数:
/usr/local/nginx/sbin/nginx -V
三、修改conf

修改Nginx的 .conf 文件,一般在

/usr/local/nginx/conf/vhost/

或者

/etc/nginx/conf/

具体参考你的环境。
在监听443的后面加上http2 default_server。

server {
    listen 443 ssl http2 default_server;
    server_name ziahao.xyz;
    ssl_certificate /path/public.crt;
    ssl_certificate_key /path/private.key;
}

然后通过

/usr/local/nginx/sbin/nginx -t

或者

nginx -t

来检测是否配置正确,然后重启 Nginx ,即可。

四、检验

在浏览器输入chrome://net-internals/打开网络观察组件,然后选择HTTP/2
[图片上传失败...(image-565c41-1513577270521)]
打开你的网站,我们看到Negotiated Protocol协议协商那里显示是h2就表示该网站开启了http/2。
[图片上传失败...(image-7d5a51-1513577270521)]


按照我的教程来做,就可以解决http2在chrome上不生效。

你可能感兴趣的:(Nginx上配置http2并解决http2在chrome上不生效。)