在 Apache Tomcat 上设置 HTTP2 的分步指南
最新版本的 Tomcat 9.x 中添加了完整的 HTTP2 支持。 HTTP/2 速度很快,比 HTTP/1.1 快得多。
当直接从 Tomcat 向浏览器提供内容(而不是通过 Web 服务器)时,实施 HTTP/2 可以显着减少应用程序加载时间并提高整体性能。我们建议在非生产环境中对此进行测试,以确保您的应用程序按预期工作。
如果您考虑在 Apache 或 Nginx 等 Web 服务器上启用它,请阅读本文。

先决条件
在实施 HTTP2 之前,Tomcat 必须使用 SSL/TLS 证书进行保护。如果您需要实施方面的帮助,请参阅本指南。

在 Tomcat 中实现 HTTP/2
注意:在进行任何更改之前先备份配置文件,以便在出现问题时可以恢复它。
- 登录到 Tomcat 服务器并导航到安装文件夹。
- 进入
conf文件夹 - 使用
vi或您喜欢的编辑器修改 server.xml 文件。 - 将以下内容添加到您的 SSL 连接器
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />总的来说,它看起来像这样:
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/key.pem"
certificateFile="conf/cert.pem"
certificateChainFile="conf/chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>以上是我的实验室配置,因此如果您复制此配置,请不要忘记调整配置以适应您的环境要求。调整端口,尤其是在使用自定义端口和认证路径时。
- 导航到 bin 文件夹并运行以下脚本以重新启动 Tomcat 实例。
./shutdown.sh
./startup.sh- 如果您检查
catalina.out日志,您将看到以下配置为支持h2确认信息:
24-Feb-2019 19:43:47.559 INFO [main] org.apache.coyote.http11.AbstractHttp11Protocol.configureUpgradeProtocol The ["https-openssl-apr-443"] connector has been configured to support negotiation to [h2] via ALPN这意味着 Tomcat 已准备好通过 HTTP2 协议处理请求。
另请阅读: LiteSpeed Web 服务器 HTTP 2 实施指南

测试Tomcat是否在H2上提供服务
我如何知道它是否按预期工作?
有多种方法可以对此进行测试。
使用 Chrome
对于测试 Intranet 应用程序很有用。
- 启动谷歌浏览器
- 按F12打开开发者工具
- 转到“网络”选项卡
- 访问您的 Tomcat 应用程序并注意协议列。

正如您所看到的,该请求是使用 h2 提供的。

使用日志
检查 access.log 文件以查看收到的请求。
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET / HTTP/2.0" 200 11468
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /tomcat.css HTTP/2.0" 200 5931
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /tomcat.png HTTP/2.0" 200 5103
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-button.png HTTP/2.0" 200 713
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-upper.png HTTP/2.0" 200 3103
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-nav.png HTTP/2.0" 200 1401
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /asf-logo-wide.svg HTTP/2.0" 200 27530
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-middle.png HTTP/2.0" 200 1918
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /favicon.ico HTTP/2.0" 200 21630您是否看到所有请求中都对HTTP/2.0进行了分类?
使用基于互联网的工具
如果 Tomcat 应用程序 URL 在互联网上可用,您可以使用以下工具进行检查:
- HTTP/2 测试
- HTTP2.Pro
结论
在 Tomcat 上实现 H2 很容易。我们强烈建议您在实施后测试您的应用程序,以确保没有副作用。
如果您有兴趣学习 Tomcat 管理,请查看此在线课程。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

