常见问题解答

常规

有关 JK 的常规信息和常见问题解答

我可以在哪里获得 JK 的帮助/支持?

主要的支持机制是通过 doc 目录中包含的 JK 文档。还可以在专门用于Apache Tomcat 连接器项目的 Apache Tomcat 网站上获取文档。如需其他帮助,最佳资源是 Tomcat 用户讨论列表。在向列表发布问题之前,您应该先搜索邮件列表存档。如果您无法在存档中找到问题的答案,则可以向用户列表发布有关 JK 的问题以获得帮助。确保包含您正在使用的 Web 服务器版本以及您正在运行的平台,并在此处确定如何订阅 tomcat 邮件列表。

我找不到 JK。它在哪里?

现在 JK 已移至tomcat-connectors存储库,可以从Tomcat 连接器 (mod_jk) 下载页面上的镜像下载 JK 的源代码和二进制文件。

JK 和 mod_jk 有什么区别?

JK是一个涵盖 Web 服务器到 Tomcat 连接器的项目。

Apache HTTP 服务器支持在 JK 上实现,使用名为mod_jk 模块的插件。

Microsoft IIS支持在 JK 上实现,使用名为ISAPI 重定向器的插件。

我可以在哪里获取更多信息?

对于JK 1.2.x,您应该阅读

有关更详细的信息,请参阅参考指南。您还可以尝试搜索邮件列表存档中的“JK”或查看源代码。

我应该使用哪种协议 - ajp12、ajp13 还是 ajp14?

ajp13 是标准协议。旧的 ajp12 已弃用ajp14 仍处于试验阶段

此外,ajp13 受所有 Apache Tomcat 版本(从 Tomcat 3.2 开始)以及其他 servlet 引擎(如 JettyJBoss)支持。

我的 Web 服务器和 Tomcat 之间有一个防火墙,它会在一段时间后中断 ajp13 连接

ajp13 协议使用持久连接,如果向 Tomcat 发送请求为 null,则流量可能为 null。防火墙用于中断非活动连接,并将使您的 Web 服务器和 Tomcat 认为连接有效。

从 JK 1.2.0 开始,ajp13 设置中添加了 socket_keepalive 属性,您应该在 工作程序操作指南workers.properties 参考 中查看它。如果其他方法均无济于事,您可以尝试 JkOptions +DisableReuse,但这会对性能产生重大影响。

在高负载下,即使我的 Apache HTTP 服务器处理了大部分负载,Tomcat 中也有很多线程

在高负载下,Apache HTTP 服务器会创建许多子进程来处理负载,这反过来会创建许多与 Tomcat 的连接来转发它们应该处理的请求。通常,当负载降低时,Apache HTTP 服务器会终止子进程/线程。但如果负载仍然存在,即使只有 Apache 处理请求(即静态内容),子进程也会被保留,并且会保留所有 ajp13 连接,即使不再使用它们。

要在一段时间不活动后关闭连接,可以使用 connection_pool_timeout,有关更多信息,请参阅 workers.properties 参考

Apache HTTP 服务器

有关 mod_jk 和 Apache HTTP 服务器的信息和常见问题解答。

每当我重新启动 Tomcat 时,Apache 都会锁定!

ajp13 协议在 Tomcat 和 Apache 之间保持一个开放套接字。Tomcat Connectors 中存在的 mod_jk 版本处理网络故障。但是对于非常古老的 mod_jk 版本,您可能还需要重新启动 Apache。

为什么 Apache 1.3 的下载目录中有两个文件 mod_jk.so (-eapi 和 -noeapi)?

许多版本的 Apache 使用一种称为扩展 API 的修改后的 API,该 API 是为与 mod_ssl 模块 一起使用而开发的。从 Apache 2.0 开始,不再有任何区别。

例如,某些较新的 Linux 发行版中存在的 Apache 1.3 包含 mod_ssl 模块。

因此,如果您有这样的“扩展 Apache”,则需要使用 mod_jk.so-eapi

您应该仅对“标准 Apache”(即不带 mod_ssl)使用 mod_jk.so-noeapi

最好避免在 STD API Apache 上使用 EAPI 模块,或在 EAPI Apache 上使用标准 API 模块。务必始终确保有与 Apache 版本匹配的 mod_jk.so

有关“garbled DSO”的消息是什么?

它与 Apache EAPI 相关,消息 'mod_jk.so is garbled - perhaps this is not an Apache module DSO ?' 刚刚告诉您,您正尝试安装在使用 EAPI 的 Apache 上编译的 mod_jk.so DSO 模块,如 apache-mod_ssl 或来自 Redhat 发行版 6.2/7.0 的 apache,但您的系统使用带有普通 API 的标准 Apache。

以及有关“模块可能在 EAPI 下崩溃”的消息!

还与 EAPI 相关,消息 '[warn] Loaded DSO /usr/lib/apache/mod_jk.so uses plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI)',mod_jk.so 在带有标准 API 的普通 Apache 下编译,您尝试在使用 EAPI 的 Apache 上安装该模块。

APXS 在构建 mod_jk 期间出现错误,如 rc=0 或 rc=255。我尝试了构建部分中的所有步骤,现在该怎么办?

APXS 是在您从源代码构建 Apache Web 服务器时创建的 Perl 脚本。如果您收到这些错误,并且您以二进制发行版获取了 Apache,则 APXS 可能未针对您的系统正确配置。最好的办法是从 Apache HTTP Server 主页 获取 Apache 源代码并自行构建。对于基本构建,请使用以下内容(阅读 Apache 文档以了解其他选项)

[user@host] ~ $ cd /usr/local/src
[user@host] ~ $ gzip -dc apache_1.3.19.tar.gz|tar xvf -
[user@host] ~ $ cd apache_1.3.19
[user@host] ~ $ ./configure --prefix=/usr/local/apache \
            --enable-module=most \
            --enable-shared=max
[user@host] ~ $ make
[user@host] ~ $ make install

注意:以上步骤假定您已下载 Apache 源代码并将其放在 /usr/local/src 目录中。

Apache 抱怨模块版本不正确

由于 Apache API 可以在版本之间更改,因此任何 Apache 模块都包含用于编译该模块的 Apache API 版本。这称为神奇模块号。

在启动时,Apache 检查模块头中的版本是否与 Apache 服务器兼容。如果不兼容,它将拒绝启动并记录错误。

请注意,小版本是向前兼容的。如果使用 Apache 2.x.y 编译模块,则生成的二进制文件应适用于任何其他版本 2.x.z,其中 z 大于或等于 y。如果您还需要与版本 2.x.z 的兼容性,其中 z 小于 y,请使用配置标志 --enable-api-compatibility。请注意,使用任何 2.x 编译的模块永远不会与 2.y 兼容,其中 x 不同于 y。在这种情况下,您需要重新编译模块。

它适用于最新的 Apache 2.x 吗?

mod_jk 与 Apache 2.x(从 2.0 到 2.4)配合良好。

mod_jk 的功能的重要部分已在 Apache HTTP Server 模块 mod_proxy_ajp 和 mod_proxy_balancer 中重新实现。它们是 Apache 2.2 和 2.4 的标准发行版的一部分。新模块不包含 mod_jk 的所有功能,但另一方面,您会随着每个新 Apache 版本自动获得这些模块。

JNI 无法与 Apache 1.3 配合使用

JNI 工作程序已被弃用。它们可能无法正常工作。请勿使用它们。

JNI 支持需要多线程环境,而这并非 Apache 1.3 的一般情况。您应该验证 Apache 1.3 是否已使用线程支持进行构建,如果没有,则可以将 pthreads 库添加到您的 httpd.conf 文件中。

# Add pthread to Apache in httpd.conf
LoadModule "/usr/lib/libpthreads.so"

还要记住,JNI 适用于多线程服务器,您应该考虑升级到 Apache 2.x 以支持 JNI。

JNI 报告称 JVM 无法在 Linux 下启动

JNI 工作程序已被弃用。它们可能无法正常工作。请勿使用它们。

在 Linux 下,您应该在启动 Apache HTTP 服务器之前设置一些环境变量

export LD_LIBRARY_PATH=$jre/bin:$jre/bin/classic:$LD_LIBRARY_PATH

此外,一些 Linux 发行版启用了名为“浮动堆栈”的 GLIBC 功能,该功能可能无法在 SMP 机器上的内核低于 2.4.10 的情况下使用。您应该通过导出环境变量来禁用浮动堆栈

export LD_ASSUME_KERNEL=2.2.5

您可能需要更新服务脚本,即 /etc/rc.d/init.d/httpd,以便在 Apache 服务器启动之前设置这些环境变量。

通过配置进行构建时出现混合错误

configure 假设您已为系统安装并配置了一些 GNU 工具,至少是 libtool

此外,一些系统可能具有混合的 cc 和 gcc 设置,这可能会让您在尝试使用本机 c 编译器构建 Apache 与使用 gcc 构建 jk 时感到困惑。

如果 make 处理未按预期工作,则应使用 GNU make gmake