Apache代理到Tomcat时保持连接的混淆

8
我有一个 Apache 2.2 服务器,在 Tomcat 6 服务器前面。使用 Apache 上的 mod_proxy_ajp 将请求代理到 Tomcat。这是一个相当标准的设置。
如果我需要禁用浏览器的 keep-alive 连接,我该怎么做?
我需要禁用 keep-alive http 请求,因为我怀疑我的一些用户有可能会丢弃非活动的 keep-alive 连接,这会导致随机出现问题。
在 Apache 和 Tomcat 上都有各种“keep alive”配置。
httpd.conf 中有 "KeepAlive Off"(在我的情况下似乎没有起作用)
还可以在 httpd.conf 中设置 ProxyPass 的位置,设置一个“keepalive”参数,但是这只有在我的 Apache 和 Tomcat 之间有代理/防火墙时才有所帮助,而在我的情况下并不是问题所在。
Tomcat 本身的 HTTP 连接器有 "keepAliveTimeout" 和 "maxKeepAliveRequests",但这只适用于 HTTP 连接器。
Tomcat ajp 连接器也有一个 "keepAliveTimeout",但这是针对来自 Apache 的 ajp 请求的,不确定是否应该/流向浏览器到 Apache 的实际 HTTP 请求。
最后还有 HTTP1.0 vs HTTP1.1 的区别。
所以这很令人困惑...有人能解释一下吗?

我想知道为什么你想要禁用保持连接功能。 - Stephane
1个回答

14

这里至少有四个“保持连接”。

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

  2. 客户端浏览器与Apache之间的TCP层保持连接。 (为了避免防火墙关闭连接,会定期发送空数据包(默认约2小时在Linux中)。我不知道如何在Apache中进行配置。)

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

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

因此,您的配置(“KeepAlive off”)可能适用于客户端和Apache之间的防火墙。使用“LogFormat”指令的“%X”来检查是否已禁用类型1的保持连接。

顺便说一句,我认为当“KeepAliveTimeout”不太长时,由防火墙引起的连接关闭并不会导致严重问题。如果您没有问题(除了警告消息),那么我认为您可以保持现状。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接