文档索引

介绍

Apache Tomcat 本机库是与 Apache Tomcat 一起使用的可选组件,它允许 Tomcat 使用某些本机资源来提高性能、兼容性等。

具体来说,Apache Tomcat Native Library 使 Tomcat 能够访问 Apache Portable Runtime (APR) 库的网络连接(套接字)实现和随机数生成器。有关如何配置 Tomcat 以使用 APR 连接器的更多信息,请参阅 Apache Tomcat 文档。

APR连接器的特点:

  • Keep-Alive 请求的非阻塞 I/O(请求之间)
  • 使用 OpenSSL 实现 TLS/SSL 功能(如果链接的 APR 库支持)
  • FIPS 140-2 支持 TLS/SSL(如果链接的 OpenSSL 库支持)
  • 支持 IPv4、IPv6 和 Unix 域套接字

头条新闻

建筑

要求

构建 tc-native 需要安装三个组件:

  • APR库
  • OpenSSL 库
  • Java SE 开发工具包 (JDK)

在基于 debian 的 Linux 中,这些依赖项可以通过以下方式安装:

 apt-get install libapr1.0-dev libssl-dev

在基于 rpm 的 Linux 中,这些依赖项可以通过以下方式安装:

 yum install apr-devel openssl-devel

UNIX系统

在所有 POSIX 系统(Linux、Solaris、HP-UX、AIX 等)上,使用众所周知的配置和 make 来构建 tc-native。
在 jni/native 运行中:

 ./configure --help

阅读所有参数的说明。

 ./configure --with-apr=$HOME/APR \
            --with-java-home=$JAVA_HOME \
            --with-ssl=$HOME/OPENSSL \
            --prefix=$CATALINA_HOME

创建包含文件和 makefile 以便能够构建 tc-native。
其中:
$HOME/APR类似于 /usr/bin/apr-1-config 或 apr 安装路径。
$JAVA_HOME/home/jfclere/JAVA/jdk1.7.0_80 是 JDK 安装路径。任何 JDK 都应该可以工作,但建议使用与 Tomcat 所使用的 JVM 相同的 JVM 版本。
$HOME/OPENSSL是 OpenSSL 的安装路径。
$CATALINA_HOME是将安装生成的库的路径。像 $HOME/apache-tomcat-8.0.47/

这样的配置能够猜测大多数 OpenSSL 标准安装。所以大多数时候以下内容就足够了:

 ./configure --with-apr=/usr/bin/apr-1-config \
            --with-java-home=/home/jfclere/JAVA/jdk1.7.0_80/ \
            --with-ssl=yes \
            --prefix=$CATALINA_HOME

要构建库并安装它们:

 make && make install

这些库可以在 $CATALINA_HOME/lib 中找到

视窗

下载 tc-native 的 Windows 源代码并解压它们。

获取APROpenSSL 的 Windows 源 。应用 native/srclib 中的补丁并为您的平台(X86 或 X64)构建 APR 和 OpenSSL。

构建与

 nmake -f NMAKEMakefile WITH_APR=... WITH_OPENSSL=... APR_DECLARE_STATIC=1

Wiki 上提供了更详细的说明,包括创建标准发行版的步骤。

安装和测试

配置Tomcat

Apache Tomcat 默认情况下处于AprLifecycleListener启用状态。不过,您应该检查conf/server.xml 以确保存在类似以下内容且未注释:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

有关配置细节,请参阅 Apache Tomcat 文档。

当使用 Unix 域套接字时,会注册清理以在套接字销毁或应用程序关闭时删除套接字。如果应用程序异常终止,则需要由调用者或管理员处理套接字删除。

UNIX系统

编辑 $CATALINA_HOME/bin/setenv.sh(如有必要,创建该文件)并将 tc-native 库的路径添加到 LD_LIBRARY_PATH。就像是:

 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH

启动 tomcat 并检查类似以下的消息:

Nov 29, 2020 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
Nov 29, 2020 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
Nov 29, 2020 12:27:41 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080

请参阅 tomcat 文档来配置连接器(请参阅 Tomcat 10.0.xTomcat 9.0.xTomcat 8.5.x

视窗

编辑 $CATALINA_BASE\bin\setenv.bat(如有必要,创建该文件)并将 tc-native 库、apr 和 OpenSSL 的路径添加到 PATH。例如:

set PATH=%PATH;C:\cygwin\home\support\tomcat-native-current-win32-src\jni\native\Debug;C:\cygwin\home\support\tomcat-native-current-win32-src\jni\apr\Debug;C:\OpenSSL\lib\VC

启动 tomcat 并检查类似以下的消息:

Nov 29, 2020 2:48:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
Nov 29, 2020 2:48:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [false], sendfile [true], accept filters [false], random [true], UDS [false].
Nov 29, 2020 2:48:18 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080