我在tomcat 6服务器前面有一个apache 2.2服务器。在apache上使用mod_proxy_ajp来代理对tomcat的请求。相当标准的设置。
如果我需要为浏览器禁用keep-alive连接,我该怎么做?
我需要禁用保持活动的http请求,因为我怀疑我的一些用户的防火墙可能会丢弃一个随机导致问题的非活动保持连接。
apache和tomcat上都有各种'keep alive'配置。
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的区别。
所以它让人感到困惑....有人可以解释一下吗?
答案 0 :(得分:12)
(至少)有四个“保持活着”。
客户端浏览器和Apache之间的HTTP层保持活跃状态。 (在HTTP / TCP连接中启用多个客户端请求。“KeepAlive”指令进行配置。)
客户端浏览器和Apache之间的TCP层保持活动状态。 (为了避免连接被防火墙关闭,请定期发送空数据包(默认情况下在Linux中大约2小时)。我不知道如何在Apache中配置。)
Apache和Tomcat之间的AJP层保持活跃。 (在AJP / TCP连接中启用多个Apache请求。要配置“ProxyPass”的“max”和“smax”选项。)
Apache和Tomcat之间的TCP层保持活跃。 (与2相同,但对于Apache和Tomcat之间的防火墙。“keepalive”选项,用于配置“ProxyPass”指令。)
因此,您的配置(“KeepAlive off”)可能对客户端和Apache中的防火墙正常工作。使用“%X”作为“LogFormat”指令来检查是否已禁用keep-alive(上面的类型1)。
顺便说一句,我认为当“KeepAliveTimeout”不是那么大时,防火墙的连接关闭不会导致严重的问题。 如果您没有问题(警告信息除外),我认为您可能会保持原样。