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 }

nginx如何启用对HTTP2的支持 | nginx如何验证HTTP2是否已启用的更多相关文章

  1. http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送

    使用 nginx 搭建一个 http2 的站点,准备所需: 1,域名 .com .net 均可(国内域名需要 icp 备案) 2,云主机一个,可以自由的安装配置软件的服务器 3,https 证书 ht ...

  2. centos7.0 64位系统 安装PHP 支持 nginx

    1  安装PHP所需要的扩展 yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl cur ...

  3. nginx使用ssl模块配置HTTPS支持

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...

  4. CentOS6.5 下在Nginx中添加SSL证书以支持HTTPS协议访问

    参考文献: 1. NginxV1.8.0安装与配置 2. CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问 3. nginx配置ssl证书的方法 4.nginx强制使用https访问 ...

  5. Nginx下配置SSL模块,支持https

    Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效 ...

  6. centos7.0 64位系统 安装PHP5.3 支持 nginx

    1  安装PHP所需要的扩展 yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl cur ...

  7. NGINX 添加MP4、FLV视频支持模块

    由于公司网站需要放置视频,但是默认的服务器环境是没有编译这个支持的模块,视频文件只能缓冲完了在播放,非常麻烦.   之前呢也安装了一个nginx_mod_h264_streaming来支持,效果很不错 ...

  8. nginx使用ssl模块配置HTTPS支持 <转>

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...

  9. 配置keepalived支持nginx高可用

    实验环境 序号 主机名 IP地址 1 nginx1 192.168.204.11 2 nginx2 192.168.204.12 安装nginx 安装nginx yum install -y epel ...

随机推荐

  1. laravel 5.1 Model 属性详解

    <?php namespace Illuminate\Database\Eloquent; /** * 下面提到某些词的含义: * 1.覆盖: 在继承该类 \Illuminate\Databas ...

  2. VSCode配置简单的vue项目

    VSCode配置简单的vue项目 https://www.cnblogs.com/wnxyz8023/p/9989447.html 由于最近要使用的项目框架为前后端分离的,采用的是vue.js+web ...

  3. Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\User given,

    使用laravel内置的注册认证系统,注册账号,提示如下错误.Google之后,发现github的一个答案,解决了.分享一下 Argument 1 passed to Illuminate\Auth\ ...

  4. 1038 一元三次方程求解 2001年NOIP全国联赛提高组

    题目描述 Description 有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100 ...

  5. BZOJ.2142.礼物(扩展Lucas)

    题目链接 答案就是C(n,m1) * C(n-m1,m2) * C(n-m1-m2,m3)...(mod p) 使用扩展Lucas求解. 一个很简单的优化就是把pi,pi^ki次方存下来,因为每次分解 ...

  6. .net 中的async,await理解

    理解: 1.async修饰的方法可理解为异步方法(必须要配合await,否则和普通方法无异)2.当async方法执行遇到await,则立即将控制权转移到async方法的调用者3.由调用者决定是否需要等 ...

  7. hdu 5831 Rikka with Parenthesis II 线段树

    Rikka with Parenthesis II 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5831 Description As we kno ...

  8. 【原】Spring整合Redis(第三篇)—盘点SDR搭建中易出现的错误

    易错点01:Spring版本过低导致的错误[环境参数]Redis版本:redis-2.4.5-win32-win64Spring原来的版本:4.1.7.RELEASESpring修改后的版本:4.2. ...

  9. 什么是NAS

    个人理解: 1.NAS本身不是一种传输协议,只是一个名词而已,就是一个网络储存. 2.NAS系统本身就是一个Linux,也不是什么发行版,就是在Linux下实现了网络储存. 3.NAS系统里面实现了很 ...

  10. Linux/CentOS实现交换机-简单的交换机实现

    个人理解: 1.交换机的核心在于Mac地址学习,使其能在全双工/半双工下进行转发工作. 2.对于专业的交换机来说,使用的是专业的网络芯片并自己实现里面的协议,比如说华为的,为什么能卖那么贵,贵在于网络 ...