Apache HTTPD - 加载 mod_jk 模块时发生分段错误

Apache HTTPD - 加载 mod_jk 模块时发生分段错误

我刚刚用 Apache httpd 2.0.52 安装设置了 mod_jk,但现在当我尝试启动 Apache 时,它​​出现了分段错误。我已检查过我使用的是针对 2.0.x 编译的 mod_jk。事实上,它是根据我拥有的同一版本构建的。我还验证了我提供给 LoadModule 的路径是否正确,并且文件的权限和所有权是否与其他模块的相同。当我从 httpd.conf 中删除 mod_jk 的“LoadModule”命令时,没有出现分段错误。

service httpd restartApache 的错误日志中没有显示任何内容。我尝试使用和重新启动使用此模块的服务器httpd

以下是返回的最后几行strace httpd -X

gettimeofday({1292100295, 434487}, NULL) = 0
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address family not supported by protocol)
socket(PF_NETLINK, SOCK_RAW, 0)         = 3
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=22378, groups=00000000}, [12]) = 0
time(NULL)                              = 1292100295
sendto(3, "\24\0\0\0\26\0\1\3\307\342\3M\0\0\0\0\0\305\333\267", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"<\0\0\0\24\0\2\0\307\342\3MjW\0\0\2\10\200\376\1\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 664
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\307\342\3MjW\0\0\0\0\0\0\1\0\0\0\10\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
close(3)                                = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Process 22378 detached

有人在使用 Apache 2.0.52 和 mod_jk 时遇到过类似的问题吗?如果没有找到解决方法,我可能会尝试自己下载并构建 Apache 服务器和 mod_jk 的源代码。

答案1

这是您找到的预编译的 mod_jk 吗?如果是这样,那么只需获取 mod_jk 的最新源代码并进行编译就足够简单了,我怀疑这就是您的问题所在 - 我已经多次针对供应商提供的 (Red Hat) Apache 编译 mod_jk,没有出现段错误。

确保已安装 httpd-devel(Red Hat/CentOS)

将真正的 JDK 解压到某个路径,例如 /usr/local/jdk1.6.0_18/

从 tomcat.apache.org 获取“tomcat-connectors”源并编译它:

cd tomcat-connectors-1.2.28-src/native
./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork
make
cp apache-2.0/mod_jk.so /etc/httpd/modules/

您的模块现在应该可以按预期工作了。

相关内容