zoukankan      html  css  js  c++  java
  • nginx如何启用对HTTP2的支持 | nginx如何验证HTTP2是否已启用

    nginx启用HTTP2特性

    查看当前nginx的编译选项

    1 #./nginx -V
    2  
    3 nginx version: nginx/1.9.15
    4 built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
    5 built with OpenSSL 1.0.2g  1 Mar 2016
    6 TLS SNI support enabled
    7 configure arguments: --prefix=/home/jackie/software/nginx --with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2g --with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 --with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 --with-http_ssl_module --with-threads --with-debug

    启用http2支持

    1. 修改编译选项
      configure的选项中加入--with-http_v2_module,由于HTTP2需要SSL的支持,因此如缺少--with-http_ssl_module选项,还需要加入--with-http_ssl_module。 如下:
      ./configure --prefix=/home/jackie/software/nginx 
                  --with-openssl=/home/jackie/Downloads/nginx/openssl-1.0.2g 
                  --with-pcre=/home/jackie/Downloads/nginx/pcre-8.38 
                  --with-zlib=/home/jackie/Downloads/nginx/zlib-1.2.8 
                  --with-http_ssl_module 
                  --with-threads 
                  --with-debug 
                  --with-http_v2_module
      
    2. 编译&升级
      make & make install
      
    3. 修改配置文件,启用HTTP2,如下:
      server {
          listen       8443 ssl http2 default_server; # 增加 http2 default_server
          server_name  192.168.0.107;
          ...
      }
      
    4. 验证配置文件
      #./nginx -t
      nginx: the configuration file /home/jackie/software/nginx/conf/nginx.conf syntax is ok
      nginx: configuration file /home/jackie/software/nginx/conf/nginx.conf test is successful
      
    5. 启动nginx
      #./nginx
      

    验证HTTP2是否已启用

    方法一

    使用高版本如56.0.2924.87的Chrome,按照如下步骤操作

    1. 使用Chrome访问启用http2的站点,比如Jackie的环境为https://192.168.0.107:8443。
    2. 新开TAB页,在地址栏中输入chrome://net-internals/#http2,检查HTTP/2 sessions下的表格。
    3. 确认表格里是否出现了上一步访问的主机地址,比如192.168.0.107:8443。

    方法二

    使用curl命令,参考HTTP/2 with curl,执行如下命令,确认站点返回的协议是否为HTTP

    curl --http2 -I 192.168.0.107:8443
    

    如执行上述命令时遇到如下错误,说明系统当前安装的curl还不支持HTTP2协议。

    curl https://192.168.0.107:8443/ --http2
    curl: (1) Unsupported protocol
    

    可以执行如下命令,检查系统当前安装的curl支持的特性列表,确认是否包含HTTP2。

    curl -V
    curl 7.47.0 (i686-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
    

    从前述输出信息可以了解到,当前安装的curl还不支持HTTP2。
    这时可参考如何启用curl命令HTTP2支持重新编译curl,加入HTTP2的支持。

    方法三

    安装Chrome插件HTTP/2 and SPDY indicator,安装完毕后访问启用HTTP2的站点,如果地址栏出现蓝色的闪电,说明站点已启用HTTP2。
    不过Jackie身在墙内,安装总是失败,所以没有验证该方法的有效性。

    完整的配置文件

    如下是完整的配置文件,删除了一些与HTTP2特性不相关的内容。

    01 worker_processes  1;
    02 error_log  logs/error.log  debug;
    03  
    04 events {
    05     worker_connections  1024;
    06 }
    07  
    08 http {
    09     include       mime.types;
    10     default_type  application/octet-stream;
    11     server_tokens off;
    12  
    13     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    14                       '$status $body_bytes_sent "$http_referer" '
    15                       '"$http_user_agent" "$http_x_forwarded_for"';
    16  
    17     access_log  logs/access.log  main;
    18  
    19     sendfile        on;
    20     tcp_nopush     on;
    21  
    22     keepalive_timeout  65;
    23     charset utf-8;
    24  
    25     server {
    26         listen 8080;
    27         server_name  192.168.0.107;
    28         if ($scheme ~ http) {
    29             return https://$server_name:8443$request_uri;
    30         }
    31     }
    32  
    33     server {
    34         listen       8443 ssl http2 default_server;
    35         server_name  192.168.0.107;
    36  
    37         ssl_certificate      /home/jackie/software/nginx_conf/server.crt;
    38         ssl_certificate_key  /home/jackie/software/nginx_conf/server.key;
    39  
    40         ssl_session_cache    shared:SSL:1m;
    41         ssl_session_timeout  5m;
    42  
    43         ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA';
    44         ssl_prefer_server_ciphers  on;
    45  
    46         add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
    47         add_header X-Frame-Options SAMEORIGIN always;
    48         add_header X-XSS-Protection "1; mode=block" always;
    49         add_header X-Content-Type-Options nosniff;
    50  
    51         location ~ / {
    52             index  index.jsp;
    53             proxy_pass http://127.0.0.1:18080;
    54             proxy_set_header        referer           '';
    55             include proxy.conf;
    56         }
    57  
    58         #error_page  404              /404.html;
    59  
    60         # redirect server error pages to the static page /50x.html
    61         #
    62         error_page   500 502 503 504  /50x.html;
    63         location = /50x.html {
    64             root   html;
    65         }
    66  
    67         location ~ /. {
    68             deny all;
    69             access_log off;
    70             log_not_found off;
    71         }
    72     }
    73  

    74 }
  • 相关阅读:
    年轻人的第一个 Spring Boot 应用,太爽了!
    面试问我 Java 逃逸分析,瞬间被秒杀了。。
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    坑爹的 Java 可变参数,把我整得够惨。。
    6月来了,Java还是第一!
    Eclipse 最常用的 10 组快捷键,个个牛逼!
    Spring Cloud Eureka 自我保护机制实战分析
    今天是 Java 诞生日,Java 24 岁了!
    厉害了,Dubbo 正式毕业!
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  • 原文地址:https://www.cnblogs.com/interdrp/p/7894489.html
Copyright © 2011-2022 走看看