8

我在 tomcat 6 服务器前面有一个 apache 2.2 服务器。在 apache 上使用 mod_proxy_ajp 代理对 tomcat 的请求。相当标准的设置。

如果我需要禁用浏览器的保持连接,我该怎么做?

我需要禁用 keep-alive http 请求,因为我怀疑我的一些用户的防火墙可能会丢弃非活动的 keep-alive 连接,这会随机导致问题。

在 apache 和 tomcat 上都有各种“保持活力”的配置。

httpd.conf 有“KeepAlive Off”(在我的情况下似乎没有什么不同)

同样在您设置 ProxyPass 的 httpd.conf 中,您可以有一个参数“keepalive”,但这仅在我的 apache 和 tomcat 之间存在代理/防火墙时才有用,在我的情况下没有代理/防火墙,这不是问题.

Tomcat 本身,http 连接器具有“keepAliveTimeout”和“maxKeepAliveRequests”,但这仅适用于 http 连接器。

tomcat ajp 连接器也有一个“keepAliveTimeout”,但这是针对来自 apache 的 ajp 请求,不确定这是否应该/流向从浏览器到 apache 的真实 HTTP 请求。

最重要的是,还有 HTTP1.0 与 HTTP1.1 的区别。

所以它变得混乱......有人可以解释一下吗?

4

1 回答 1

14

有(至少)四个“保持活力”。

  1. 客户端浏览器和 Apache 之间的 HTTP 层保持活动。(在 HTTP/TCP 连接中启用多个客户端请求。配置“KeepAlive”指令。)

  2. 客户端浏览器和 Apache 之间的 TCP 层保持活动。(为避免连接被防火墙关闭,请定期发送空包(Linux默认为2小时左右)。我不知道如何在Apache中配置。)

  3. AJP 层在 Apache 和 Tomcat 之间保持活动。(在 AJP/TCP 连接中启用多个 Apache 请求。“ProxyPass”的“max”和“smax”选项进行配置。)

  4. Apache 和 Tomcat 之间的 TCP 层保持连接。(与 2 相同,但用于 Apache 和 Tomcat 之间的防火墙。要配置“ProxyPass”指令的“keepalive”选项。)

因此,您的配置(“KeepAlive off”)可能适用于客户端和 Apache 中的防火墙。对“LogFormat”指令使用“%X”来检查是否禁用了keep-alive(上述类型1)。

顺便说一句,我认为当“KeepAliveTimeout”不是那么大时,防火墙关闭连接不会造成严重问题。如果你没有问题(除了警告信息),在我看来,你可能会离开。

于 2009-11-24T04:14:27.290 回答