zoukankan      html  css  js  c++  java
  • 配置Tomcat使用HTTP/2

    转自: https://zhuanlan.zhihu.com/p/21349186 

    前情提要:

    Tomcat高效响应的秘密(一) Sendfile与Gzip

    Tomcat高效响应的秘密(二) keep alive


    前面高效响应的两篇,我们分析了Sendfile的特性以及HTTP1.1的keep-alive特性,基于这些功能,Tomcat可以更快速的响应请求。

    而在keep-alive的特性分析时,我们发现是服务端与客户端在keep-alive未超时的时候,一直保持TCP的连接,这样在新的请求到达时就避免了重新握手和断开连接。


    为了进一步提升性能,Google率先发起并推出了Spdy,许多主流的浏览器都允以支持。最终IETF以此为参照,提出了HTTP/2的标准。


    在减少延迟,加速页面加载方面,维基百科上有如下描述:


    • Data compression of HTTP headers

    • HTTP/2 Server Push.

    • Pipelining of requests

    • Fixing the head-of-line blocking problem in HTTP 1.x

    • Multiplexing multiple requests over a single TCP connection



    我们来试用一样HTTP/2,直观感受一下它的特点。


    需要的材料有:

    • 版本要大于 Tomcat 9.0.0 M4

    • OpenSSL

    • 使用OpenSSL生成的证书文件



    观察新版本的Tomcat配置文件server.xml,其中包含如下内容:


    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2

    This connector uses the APR/native implementation. When using the

    APR/native implementation or the OpenSSL engine with NIO or NIO2 then

    the OpenSSL configuration attributes must be used.

    -->

    <!--

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"

    maxThreads="150" SSLEnabled="true" >

    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

    <SSLHostConfig>

    <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"

    certificateFile="conf/localhost-rsa-cert.pem"

    certificateChainFile="conf/localhost-rsa-chain.pem"

    type="RSA" />

    </SSLHostConfig>

    </Connector>

    -->


    由于HTTP/2只支持在HTTPS中使用,因此证书是必须的,制做证书的原理,各位请自行Google。


    在Tomcat中,要配置其支持HTTP/2,需要以下步骤:


    1. 使用openssl,执行如下命令生成证书

    openssl genrsa -out server.key 2048

    openssl rsa -in server.key -out server.key

    openssl req -new -x509 -key server.key -out ca.crt -days 3650



    2. 官网下载Native的dll文件,拷贝到c:windowsSystem32目录下,以支持Apr Connector


    3. 修改server.xml,将支持http2的https Connector配置去掉注释,修改其中对应的证书路径为第一步生成的路径。

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                   maxThreads="150" SSLEnabled="true" >
            <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
            <SSLHostConfig>
                <Certificate certificateKeyFile="conf/server.key"
                             certificateFile="conf/ca.crt"/>
            </SSLHostConfig>
        </Connector>
    

    4. 重启Tomcat


    5. 使用访问


    6. 查看logs目录下中对应日期的accesslog, 默认情况下,tomcat的配置中默认开启了accesslog ,此时我们发现,请求使用的协议已经是HTTP 2.0



    7. 为了观察更加细致,可以配置Tomcat的日志级别,从而输出更加详细的日志。设置org.apache.coyote.http2.level = FINE,关于日志的原理,可以参考之前两篇文章:

    Tomcat的Logging

    Tomcat的Logging -- 内部实现方式


    8. github 下载一个测试的demo GitHub - jfclere/h2_demos

    下载后需要在本地执行.sh文件,生成对应的html文件和相应的images。

    9. 部署第8步生成的文件到某个特定应用中,或是新建一个空应用将其添加进去,访问这个应用,查看页面对应的执行时间。


    通过上面的这些步骤,我们可以更直观的体验一把HTTP/2带来的性能提升。我们后面的文章再分析其实现原理,各位可以先看之前的这篇文章

    服务器推送之WebSocket--原理及Tomcat的实现,了解协议的upgrade


    在Youtube上,有Tomcat 的commiter 之一 Mark 介绍Tomcat 的Http/2的视频,墙外的朋友可以直接访问该链接:

    墙内的朋友,可以回复关键字http2,获取下载地址


    相关阅读

    Tomcat的Connector组件

    Tomcat高效响应的秘密(二) keep alive

    Tomcat高效响应的秘密(一) Sendfile与Gzip

    服务器推送之WebSocket--原理及Tomcat的实现

    Tomcat的Logging



    猜你喜欢

    1. 深度揭秘乱码问题背后的原因及解决方式

    2. WEB应用是怎么被部署的?

    3. 怎样调试Tomcat源码

    4. IDE里的Tomcat是这样工作的!

    5. 重定向与转发的本质区别

    6. 怎样阅读源代码



    本专栏由曾从事应用服务器核心研发的工程师维护。文章深入Tomcat源码,分析应用服务器的实现细节,工作原理及与之相关的技术,使用技巧,工作实战等。起于Tomcat但不止于此。同时会分享并发、JVM等,内容多为原创,欢迎关注。

    推荐关注同名公众号: Tomcat那些事儿

  • 相关阅读:
    validate BST
    LC282. Expression Add Operators
    nginx统计日志命令
    iptables和firewalld命令
    nginx安装
    测试服务器IO
    规范主机名和设置最大文件进程数
    Docker安装
    MySQL/MariaDB二进制安装
    Docker原理
  • 原文地址:https://www.cnblogs.com/xifenglou/p/9394948.html
Copyright © 2011-2022 走看看