nginx启用HTTP2特性

这篇具有很好参考价值的文章主要介绍了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特性不相关的内容。文章来源地址https://www.toymoban.com/news/detail-785339.html

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的资料

  • Module ngx_http_v2_module
  • nginx的http2.0性能太逆天了,HTTPS网站性能优化
  • 升级Nginx到1.9.12并开启HTTP/2
  • HAProxy、Nginx 配置 HTTP/2 完整指南
  • Nginx HTTP2 编译
  • 前端工程师学习Nginx入门篇
  • 前端工程师学习Nginx实践配置HTTP2.0篇
  • 解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题
  • 或许是 Nginx 上配置 HTTP2 最实在的教程了

HTTP2的相关资料

  • HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
  • 前端性能优化的另一种方式——HTTP2.0
  • HTTP 2.0 详细介绍
  • HTTP2.0协议
  • 前端工程师应该对 HTTP 了解到什么程度?从哪些途径去熟悉更好?
  • 前端应该了解的HTTP2
  • HTTP 2.0的那些事
  • Why Domain Sharding is Bad News for Mobile Performance and Users
  • http2 explained
  • http2 explained

其它

  • DNS工作流程及原理 浅说域名、IP与DNS的关系
  • DNS工作流程及原理 域名、IP与DNS的关系
  • 浏览器加载和渲染html的顺序
  • JAVASCRIPT 装载和执行
  • 从输入 URL 到页面加载完成的过程中都发生了什么事情?
  • 浏览器的渲染原理简介
  • 从浏览器的渲染原理讲CSS性能

到了这里,关于nginx启用HTTP2特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • http1.1与http2.0

    通俗来讲,http就是计算机通过网络进行通信的规则,是一个基于 请求与响应 , 无状态的 , 应用层协议 。常用于 TCP/IP协议 传输数据。目前任何终端之间任何一种通信方式都必须按Http协议进行,否则无法连接。tcp(三次握手,四次挥手)。 请求与响应 :客户端请求、服务端

    2023年04月19日
    浏览(67)
  • Http1和Http2的区别

    一、HTTP1和HTTP2的区别 1.新的二进制格式:HTTP2采用二进制格式而HTTP1使用文本格式。 2.多路复用:HTTP2是完全多复用的,而非有序并阻塞的,只需一个连接即可实现并行。HTTP1一个连接只能发送一个请求。 3.首部压缩:HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2

    2024年02月16日
    浏览(32)
  • FireFox禁用HTTP2

    最近需要调试接口,但是,Chrome都是强制使用h2协议,即HTTP/2协议。为了排除h2协议排除对接口调用的影响,需要强制浏览器使用HTTP1协议。 设置firefox的network.http.http2.enabled为禁用,这样就禁用http2协议。 这样就强制Firefox使用http1协议,请求后台接口。

    2024年02月10日
    浏览(33)
  • [完整] SpringBoot开启Http2

    HTTP/2.0,通常简称为HTTP/2,是一种用于传输超文本(例如网页和资源文件)的网络协议。它是HTTP/1.1的继任者,旨在提高性能和效率,以适应现代Web应用的需求。HTTP/2的主要特点包括以下几点: 多路复用(Multiplexing) :HTTP/2允许多个请求和响应同时在单个连接上传输,而不像

    2024年02月09日
    浏览(33)
  • HTTP1.1、HTTPS、HTTP2.0 、HTTP3.0

    优点: 整体方面:简单、灵活和易于扩展、应用广泛和跨平台 性能方面:长连接、管道网络传输解决请求队头阻塞(没有使用) 缺点: 安全方面:无状态、明文窃听、伪装、篡改 性能方面: Header未经压缩就发送,只能压缩body,头部冗长 每次发送相同的首部造成比较多的

    2024年02月16日
    浏览(36)
  • HTTP1.0、HTTP1.1、HTTP2.0 协议的特点

    HTTP(Hypertext Transfer Protocol)是一种用于在Web浏览器和Web服务器之间传输数据的协议。HTTP的版本有很多,其中比较常见的有 HTTP 1.0 、 HTTP 1.1 和 HTTP 2.0 ,它们有各自的特点。 HTTP 1.0 的特点: 1. 每个请求/响应需要建立新的TCP连接,并在完成后关闭连接,导致较高的延迟。 2. 每

    2024年02月05日
    浏览(44)
  • HTTP1.0、HTTP1.1、HTTP2.0 协议的区别

    HTTP 1.1相比HTTP 1.0具有以下优点: 1. 持久连接 :HTTP 1.1引入了持久连接机制,允许多个请求和响应复用同一个TCP连接。这样可以减少建立和关闭连接的开销,提高性能和效率。 2. 流水线处理 :HTTP 1.1支持流水线处理,即可以同时发送多个请求,不需要等待前一个请求的响应。

    2024年02月05日
    浏览(50)
  • HTTP1.0和HTTP1.1和HTTP2.0的主要区别

    先上结论,面试常问,同时也是我们学习HTTP协议所必须了解的一些新机制,我们往往学习的都是HTTP1.0的一些基础,1.1 2.0也是企业中常用的东西,也优化了很多nb的属性,下面我们简单来了解下! HTTP 是基于TCP/IP协议的,每一次 建立或者断开连接 都需要三次握手四次挥手的 开销

    2023年04月17日
    浏览(51)
  • jdk8使用okhttp发送http2请求

    本文主要用于工作记录,在项目中遇到了就记录一下 在早期,原生的JDK8是不支持HTTP/2协议的,所以,要想使用这个特性,需要有web服务器和应用环境的支持, 例如:在VM中增加 -Xbootclasspath/p:/Users/a1234/Downloads/alpn-boot-8.1.11.v20170118.jar 来配合使用 但是从8u252开始,ALPN层已经从

    2024年02月14日
    浏览(48)
  • http1.0,http1.1,http2.0,http3.0 区别有哪些

    20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,这被认为是互联网的起源。70 年代,研究人员基于对 ARPA 网的实践和思考,发明出了著名的 TCP/IP 协议。该协议具有良好的分层结构和稳定的性能,并在 80 年代中期进入了 UNIX 系统内核,促使更多的计算机接

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包