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 }
  • 相关阅读:
    表单
    html 基础代码
    thread
    流的存入读取
    异常

    Android——多线程编程练习题
    Android——进度对话框
    安卓3个练习题
    Android—对话框
  • 原文地址:https://www.cnblogs.com/interdrp/p/7894489.html
Copyright © 2011-2022 走看看