在Tomcat中配置HTTP/2需要满足以下条件,并按照步骤操作:
一、前提条件
- Tomcat版本 ≥ 8.5(推荐使用Tomcat 9或10)。
- JDK版本 ≥ 8(需支持ALPN协议,JDK 8需手动启用ALPN)。
- 已配置HTTPS(HTTP/2必须基于TLS运行)。
二、配置步骤
1. 确保HTTPS已正确配置
- 参考之前的HTTPS配置,确保
server.xml
中已启用NIO协议的HTTPS连接器(端口通常为8443)。
2. 修改 server.xml
启用HTTP/2
在 conf/server.xml
中找到HTTPS连接器(<Connector port="8443" ...>
),添加以下属性:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
sslProtocol="TLS"
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"
compression="on" compressionMinSize="1024"
server="Apache Tomcat" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/tomcat.jks"
certificateKeystorePassword="your_password"
type="RSA" />
</SSLHostConfig>
</Connector>
- 关键参数:
sslImplementationName
:必须使用OpenSSL实现(需Tomcat Native库支持)。<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
:启用HTTP/2协议。
3. 安装Tomcat Native库(可选但推荐)
- 作用:提升HTTPS和HTTP/2性能,需OpenSSL支持。
- 步骤:
- 下载对应平台的Tomcat Native库(官方下载页)。
- 将库文件(如
tcnative-1.dll
或libtcnative-1.so
)放入:
- Windows:
Tomcat/bin/
- Linux:
LD_LIBRARY_PATH
指定的路径(如/usr/lib
)。
- 确保系统已安装OpenSSL(Linux:
openssl-devel
,Windows: 使用预编译库)。
4. 验证HTTP/2是否生效
- 方法1:浏览器开发者工具
访问https://your-domain:8443
,在浏览器开发者工具的 Network 选项卡中,查看协议列是否为h2
。 - 方法2:命令行工具
使用curl
测试:
输出中应包含curl -v --http2 https://your-domain:8443
HTTP/2 200
。
三、常见问题
1. HTTP/2未生效
- 原因:客户端或浏览器不支持HTTP/2,或TLS协议版本过低。
- 解决:
- 确保客户端支持HTTP/2(现代浏览器默认支持)。
- 在
server.xml
中强制使用TLS 1.2+:<SSLHostConfig protocols="TLSv1.2,TLSv1.3">
2. 缺少ALPN支持(JDK 8问题)
- 现象:日志报错
No ALPNProcessors available
。 - 解决:
- 升级到JDK 9+(推荐),或
- 手动为JDK 8添加ALPN扩展:
- 下载ALPN库(Jetty ALPN)。
- 启动Tomcat时添加JVM参数:
-javaagent:/path/to/jetty-alpn-agent.jar
3. Tomcat Native库加载失败
- 日志报错:
Failed to load the Tomcat native library
。 - 解决:
- 确认库文件路径正确。
- 检查OpenSSL版本兼容性(推荐OpenSSL 1.1.1+)。
四、附录:完整配置示例
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200" SSLEnabled="true"
scheme="https" secure="true"
sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"
compression="on" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig protocols="TLSv1.2,TLSv1.3">
<Certificate certificateKeystoreFile="conf/tomcat.jks"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
五、注意事项
- 性能调优:
HTTP/2建议启用压缩(compression="on"
)并调整maxThreads
(根据服务器资源)。 - 浏览器兼容性:
部分旧版浏览器(如IE11)不支持HTTP/2,Tomcat会自动降级到HTTP/1.1。 - 日志监控:
检查logs/catalina.out
是否有HTTP/2相关的启动日志(如ProtocolHandler ["http2-nio-8443"]
)。
完成配置后,Tomcat将同时支持HTTPS和HTTP/2协议。