nginx配置域名启用http2协议

HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。HTTP/2在支持HTTP1.1的基础上拓展了, 较之1.1在性能上有着大幅度的提升。现在基本都主流浏览器都支持HTTP2协议,许多支持HTTPS的网站基本也都启用了 HTTP2协议,若我们的域名配置了HTTPS证书,可以在nginx中配置启用HTTP2协议,加速网站响应效率。

 

一、HTTP 2.0简述

1、HTTP 2.0简介

HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。目前在开放互联网上HTTP 2.0将只用于https://网址,而http://网址将继续使用HTTP 1.1。

2、HTTP 2.0 优点

HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语意兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作。有以下优点

  • 二进制分帧
  • 首部压缩
  • 流量控制
  • 多路复用
  • 请求优先级
  • 服务器推送

二、前提条件

1、openssl的版本必须在1.0.2e及以上,在 Chrome 51后,谷歌去掉了对 NPN 的支持,HTTP2不能用了会证书错误,而openssl1.0.2e之后的版本修复了此问题

2、开启https加密,目前http2.0只支持开启了https的网站

3、nginx的版本必须在1.9.5以上,原因是nginx从1.9.5开始,已经用 http_v2_module 模块替换了 ngx_http_spdy_module

三、准备openssl

1、查看openssl

$ openssl version 查看是否安装了openssl,安装了如下,且1.0.2k大于e

2、安装openssl

若没安装或者版本低于1.0.2e,去下载安装

下载 $ wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
解压 $ tar zxvf openssl-1.0.2r.tar.gz
进入 $ cd openssl-1.0.2r
配置 $ ./config
编译 $ make 
安装 $ make install

3、更新openssl

由于是源码编译安装,若之前安装过,openssl相关命令配置不会自动更新,需手动更新

备份旧的命令 

$ mv /usr/bin/openssl /usr/bin/openssl.old
$ mv /usr/include/openssl /usr/include/openssl.old

添加软连接
$ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
$ ln -s /usr/local/ssl/include/openssl /usr/include/openssl

写入openssl库文件的搜索路径
$ echo "/usr/local/ssl/lib" >> /etc/ld.so.conf

使修改后的搜索路径生效 
$ ldconfig

重新查看openssl版本$ openssl version

若openssl已经安装且版本大于1.0.2e,以上操作可省略

四、修改nginx配置

1、查看nginx版本

$ /usr/local/openresty/nginx/sbin/nginx -V

nginx version: openresty/1.13.6.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 
--add-module=../ngx_devel_kit-0.3.0 --add-module=../iconv-nginx-module-0.14 
--add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 
--add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 
--add-module=../form-input-nginx-module-0.12 
--add-module=../encrypted-session-nginx-module-0.08 --add-module=../ngx_postgres-1.0 
--add-module=../srcache-nginx-module-0.31 
--add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 
--add-module=../headers-more-nginx-module-0.33 
--add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 
--add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 
--add-module=../rds-csv-nginx-module-0.09 
--add-module=../ngx_stream_lua-0.0.5 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib 
--with-http_realip_module 
--with-http_stub_status_module --with-http_ssl_module 
--with-http_gzip_static_module --with-stream --with-stream_ssl_module

看是否安装了with-http_v2_module,这里看到没有安装要安装

http_ssl_module看到已经安装了,若没有安装也要安装下

2、重新编译nginx

1、添加ngx_http_v2_module同时要带上原来的参数

$ ./configure --prefix=/usr/local/openresty --with-cc-opt=-O2 \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \

--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-luajit

若要更新openssl加上

--with-openssl=/usr/local/ssl \ 

重新编译注意事项:

1、--prefix=/usr/local/openresty,是配置安装路径,而不是--prefix=/usr/local/openresty/nginx

2、要添加--with-luajit,重新配置luajit,不然启动nginx找不到libluajit-5.1.so.2,还得手动去添加

3、带有--add-module的模块无需带上,编译时openresty会自动添加

2、接下来$ make 编译,注意不要执行make install安装了,这样会覆盖原来的安装

3、备份原来的nginx二进制文件,以免出错时便于回退

$ cp /usr/local/openresty/nginx/sbin/nginx /usr/local/openresty/nginx/sbin/nginx.bak

4、用新编译的nginx替换掉旧的nginx

$ cp  /opt/soft/openresty-1.13.6.1/build/nginx-1.13.6/objs/nginx  /usr/local/openresty/nginx/sbin/nginx

5、查看添加是否成功

$ /usr/local/openresty/nginx/sbin/nginx -V

nginx version: openresty/1.13.6.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx 
--with-cc-opt='-O2 -O2' 
--add-module=../ngx_devel_kit-0.3.0 
................. 
--with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib 
--with-http_realip_module 
--with-http_v2_module 
--with-http_stub_status_module 
--with-http_ssl_module 
--with-http_gzip_static_module 
--with-stream 
--with-stream_ssl_module

可以看到 http_v2_module模块以已经添加成功

6、配置nginx.conf

 server {
 	listen       80;
        listen 443 ssl http2; #增加http2
        server_name www.uwsxxx.com;
        #开启ssl并添加证书
        ssl on;
        ssl_certificate cert/nginx_uws.pem;
        ssl_certificate_key cert/nginx_uws.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;
        
        access_log /usr/local/openresty/nginx/logs/access.log combined;
        
        location / {
                 proxy_set_header Host $host:$proxy_port;
                 proxy_set_header   X-Real-IP   $remote_addr;
                 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_pass http://uws02:7867;

                 proxy_redirect http:// $scheme://;
            	 if ( $server_port = 80 ){
                    rewrite ^(.*) https://$server_name$1 permanent;
             	 }

        }
}

7、重启nginx

$ /usr/local/openresty/bin/openresty -s reload 加载配置无效,必须停止后重新启动

必须先停止 $ /usr/local/openresty/bin/openresty -s stop

再重启启动 $ /usr/local/openresty/bin/openresty 

8、查看生效 

在chrome浏览器地址栏中输入我们的域名:https://www.uwscloud.com 访问,然后再输入chrome://net-internals/#http2 查看启用了http2的域名,可以看到配置的域名已经出现了

nginx配置域名启用http2协议_第1张图片

参考:http://nginx.org/en/docs/http/ngx_http_v2_module.html

参考:https://www.cnblogs.com/tinywan/p/7860774.html

你可能感兴趣的:(Nginx)