带有 APR 的 Tomcat 仍然说 aprConnector 是假的

com*_*day 5 java https tomcat apr

这是 server.xml 中的连接器:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150"
               SSLEnabled="true"
               scheme="https"
               compression="off"
               connectionTimeout="1190"
               address="0.0.0.0"
               >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="/etc/ssl/certs/private.key"
                         certificateFile="/etc/ssl/certs/public.pem"
                          />
        </SSLHostConfig>
</Connector>
Run Code Online (Sandbox Code Playgroud)

此连接器的目标是通过 HTTP2 和 APR 以及 HTTPS 提高速度。

我们使用操作系统包 tomcat-native 安装了 tomcat native。

启动时的日志输出:

信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 使用 APR 版本 [1.6.3] 加载基于 APR 的 Apache Tomcat 本机库 [1.2.16]。

信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR 功能:IPv6 [true]、sendfile [true]、接受过滤器 [false]、随机 [true]。

INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL 配置:useAprConnector [false],useOpenSSL [true]

一切看起来都很棒,除了useAprConnector [false]

那么APR真的在做什么吗?

我在相关文档中找不到任何内容:

https://tomcat.apache.org/tomcat-8.0-doc/config/http.html#SSL_Support

https://tomcat.apache.org/tomcat-8.0-doc/apr.html

Chr*_*ltz 8

Tomcat 8.5 中的当前默认设置是使用 Java NIO 连接器和 OpenSSL 作为加密引擎。libtcnative仍然需要,这需要libapr,但没有使用“APR 连接器”本身。

这意味着 Tomcat 使用带有 OpenSSL 引擎的纯 Java 连接器进行加密。您可以获得 OpenSSL 速度的优势,而没有 APR 连接器本身的一些缺点。

IMO 这是您可用的最佳配置选项,因此您应该保留它,除非您有明确的理由明确使用 APR 连接器。

如果你真的想使用 APR 连接器,那么你需要将你的useAprConnector属性AprLifecycleListenertrue设置.

  • @dv3 NIO 和 NIO2 连接器对于 APR 之上的一个附加场景是非阻塞的。非阻塞 I/O 将在所有环境中更好地扩展,并在高流量生产环境中提供更好的服务。有一些关于在未来版本中删除 APR 连接器的讨论,因为 APR 的性能优势主要归功于 TLS 的 OpenSSL 引擎。现在可通过 NIO 连接器获得,因此 APR 连接器不再具有明显的优势。 (2认同)