首页 > 系统相关 >nginx启用HTTP2特性

nginx启用HTTP2特性

时间:2024-01-13 09:02:33浏览次数:35  
标签:http 启用 -- jackie server nginx HTTP2

本文于2017年2月底完成,发布在个人博客网站上。
考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。


查看当前nginx的编译选项

#./nginx -V

nginx version: nginx/1.9.15
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
built with OpenSSL 1.0.2g  1 Mar 2016
TLS SNI support enabled
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特性不相关的内容。

worker_processes  1;
error_log  logs/error.log  debug;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;
    charset utf-8;

    server {
        listen 8080;
        server_name  192.168.0.107;
        if ($scheme ~ http) {
            return https://$server_name:8443$request_uri;
        }
    }

    server {
        listen       8443 ssl http2 default_server;
        server_name  192.168.0.107;

        ssl_certificate      /home/jackie/software/nginx_conf/server.crt;
        ssl_certificate_key  /home/jackie/software/nginx_conf/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
		
        ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA';
        ssl_prefer_server_ciphers  on;

        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
        add_header X-Frame-Options SAMEORIGIN always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header X-Content-Type-Options nosniff;
	
        location ~ / {
            index  index.jsp;
            proxy_pass http://127.0.0.1:18080;
            proxy_set_header        referer           '';
            include proxy.conf;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }
    }

}

参考资料

nginx启用http2的资料

HTTP2的相关资料

其它

标签:http,启用,--,jackie,server,nginx,HTTP2
From: https://www.cnblogs.com/jackieathome/p/17957273

相关文章

  • AD域办公电脑启用WIFI自动链接
    环境:AD/winSer2019STD域控/辅域,NPS+CA/winSer2016STD成员服务器,AC是H3CWX2520X-LI,AP任选兼容的效果:加域的办公电脑在集团各城市据点自动接入Office之WiFi信号首先,AD域配置(AD服务器搭建过程自行搜索)。对各城市计算机对象OU分组,比如区域-生产区域办公、生产设备、办公电脑、VIP等等,......
  • 使用Nginx作为反向代理服务器在Linux中的最佳实践
    在Linux环境下,Nginx因其高效性能、稳定性以及丰富的功能集而广泛用于作为反向代理服务器。以下是在Linux中使用Nginx作为反向代理服务器的最佳实践:1.安装与配置首先,确保你的Linux发行版已经安装了Nginx。大多数Linux发行版都提供了Nginx的包管理工具。例如,在基于Debian的系统上,你......
  • Nginx 服务器开启status页面检测服务状态
    一、Nginxstatusmonitor和apache中服务器状态一样。输出的内容如:  第1列:当前与http建立的连接数,包括等待的客户端连接:2第2列:接受的客户端连接总数目:20处理的客户端连接总数目:20客户端总的请求数目:50第3列:当前,nginx读请求连接当前,nginx写响应返回给......
  • Nginx采用虚拟目录的方式代理IIS站点
    Nginx采用虚拟目录的方式代理IIS站点起因背景由于IIS出现了某种不可知的问题,H5APP的部署从IIS改为Nginx。H5APP的Nginx的部署比较简单,直接修改官方的实例即可但是之前H5站点中有一个虚拟目录用于客户单点登录认证,所以需要在Nginx中添加对应的虚拟目录,但是单点认证是ASP.Net......
  • [转帖]京东大佬细说:Nginx反向代理时保持长连接,看完直呼"学到了!"
    https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247488405&idx=1&sn=7081ff4e0ac1de38ef14acf49d9102cd&utm_source=tuicool&utm_medium=referral 前言:nginx反向代理,如何通过配置支持从client到server的长连接?如何避免nginx线程池内线程数反复震荡导致性能......
  • [转帖]nginx反向代理时保持长连接
    https://www.cnblogs.com/liufarui/p/11075630.html ·【场景描述】HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长......
  • IIS——应用程序池——高级设置——启用32位应用程序 :true
    IIS——应用程序池——高级设置——启用32位应用程序:true打开InternetInformationServices(IIS)管理器。在左侧导航栏中,展开服务器节点并选择“应用程序池”。在中间窗格中,选择要更改的应用程序池。在右侧操作窗格中,点击“高级设置”。在高级设置对话框中,找到“启用32位......
  • nginx搭建文件下载服务器无法显示和下载中文文件
    背景:想自己搭建一个下载文件服务器,网上很多教程,就跟着做了,搭建的过程中碰到了如下的几个问题,在这里记录一下,以免后面忘记了问题:1.路径分隔符/和\的问题.在写alias的时候是直接粘贴的windows的路径,因此默认是\,后面发现有问题,后面就切换成/就可以了2.location块后的路......
  • docker安装nginx
    Nginx安装 1、拉取镜像(不指定版本,默认最新版) dockerpullnginx  2、创建挂载目录     mkdir-p/data/nginx/conf    mkdir-p/data/nginx/logmkdir-p/data/nginx/html [root@localhostconf]#mkdir-p/data/nginx/html[root@localhostconf]#......
  • nginx 根据端口进行判断进行自动跳转
    listen80;listen443ssl;server_namexxxxxx.org.cnwww.xxxxxx.org.cn;large_client_header_buffers41m;fastcgi_intercept_errorson;if($server_port=443){#重定向到80端口rewrite^/(.*)$http://www.xx......