Tomcat 8.5配置APR协议HTTPS失败:已装APR库仍无法初始化
Tomcat 8.5配置HTTPS时APR原生库无法加载的排查方案
问题描述
我尝试用CA颁发的证书文件(certificate.crt)、私钥文件(private.key)和证书链文件(ca_bundle.crt)在Apache Tomcat 8.5上配置HTTPS,按照官方文档修改了server.xml,配置如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="conf/cert/private.key" certificateFile="conf/cert/certificate.crt" certificateChainFile="conf/cert/ca_bundle.crt" type="RSA" /> </SSLHostConfig> </Connector>
但启动Tomcat时报错,提示APR原生库未找到,无法初始化Http11AprProtocol连接器,尽管我已经安装了APR Tomcat原生库。错误日志如下:
org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/local/jdk1.8.0_131/jre/lib/amd64:/usr/local/jdk1.8.0_131/jre/lib/i386::/home/conecta/Documentos/apache-tomcat-8.5.32/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] org.apache.catalina.LifecycleException: Failed to initialize component [Connector[org.apache.coyote.http11.Http11AprProtocol-8443]] (Stack trace ...) Caused by: org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is not available
$CATALINA_HOME/lib目录下已包含APR相关文件:
annotations-api.jar catalina-tribes.jar jaspic-api.jar libtcnative-2.so.0 tomcat-dbcp.jar tomcat-jni.jar catalina-ant.jar ecj-4.6.3.jar jsp-api.jar libtcnative-2.so.0.0.6 tomcat-i18n-es.jar tomcat-util.jar catalina-ha.jar el-api.jar libtcnative-2.a servlet-api.jar tomcat-i18n-fr.jar tomcat-util-scan.jar catalina.jar jasper-el.jar libtcnative-2.la tomcat-api.jar tomcat-i18n-ja.jar tomcat-websocket.jar catalina-storeconfig.jar jasper.jar libtcnative-2.so tomcat-coyote.jar tomcat-jdbc.jar websocket-api.jar
我已经在setenv.sh中更新了LD_LIBRARY_PATH使其包含该lib目录,也参照官方安装指南操作过,但问题仍未解决,请问可能是什么原因?
可能的原因及解决方法
1. APR库文件权限不足
Tomcat运行用户需要对libtcnative-2.so拥有读和执行权限。
- 检查权限:
ls -l $CATALINA_HOME/lib/libtcnative-2.so - 如果权限不符合(比如只有所有者有执行权),执行:
chmod 755 $CATALINA_HOME/lib/libtcnative-2.so
2. APR库依赖的系统库缺失
libtcnative-2.so依赖系统级的APR、OpenSSL等库,缺失这些依赖会导致无法加载。
- 检查依赖:
ldd $CATALINA_HOME/lib/libtcnative-2.so - 输出中如果出现
not found的条目,安装对应依赖包:- 基于Debian/Ubuntu:
apt-get install libapr1 libssl1.1 - 基于RHEL/CentOS:
yum install apr openssl
- 基于Debian/Ubuntu:
3. LD_LIBRARY_PATH未正确生效
即使在setenv.sh中配置了变量,也可能因为Tomcat启动方式的问题未加载。
- 确认
setenv.sh中的配置正确:export LD_LIBRARY_PATH="$CATALINA_HOME/lib:$LD_LIBRARY_PATH" - 验证变量是否生效:在Tomcat启动脚本(
catalina.sh)开头添加echo $LD_LIBRARY_PATH,启动后查看输出是否包含$CATALINA_HOME/lib;或者用ps aux | grep tomcat查看进程的环境变量。 - 若直接修改
setenv.sh不生效,可以尝试在系统全局配置(比如/etc/profile)中添加LD_LIBRARY_PATH,然后重新登录系统再启动Tomcat。
4. 架构不匹配
JDK和APR库的架构必须一致(同为32位或64位)。
- 检查APR库架构:
file $CATALINA_HOME/lib/libtcnative-2.so - 检查JDK架构:
java -version - 若架构不匹配,去Tomcat官网下载对应架构的APR原生库替换现有文件。
5. Tomcat与APR库版本不兼容
不同版本的Tomcat需要对应版本的APR原生库,版本不匹配会导致加载失败。
- 确认当前Tomcat 8.5.x对应的APR库版本,下载适配的原生库包,替换
$CATALINA_HOME/lib下的相关文件。
内容的提问来源于stack exchange,提问作者Everton Colombo
相关产品推荐
相关产品推荐

