Apache mod_proxy和Tomcat的错误网关502错误

2022-08-31 17:35:15

我们在Tomcat 6和Apache上运行一个web应用程序,mod_proxy 2.2.3。看到很多像这样的502错误:

糟糕的网关!代理服务器收到来自上游服务器的无效响应。

代理服务器无法处理请求 GET /the/page.do。

原因:从远程服务器读取时出错

如果您认为这是服务器错误,请与网站站长联系。

错误 502

Tomcat 有很多线程,所以它不受线程约束。我们通过JMeter将2400名用户推向该应用程序。所有盒子都位于快速卸载网络上的防火墙内,因此应该没有任何网络问题。

有人对要看或尝试的东西有什么建议吗?接下来,我们将前往 tcpdump。

2008年10月21日更新:仍然没有弄清楚这一点。在负载下只看到极少数。下面的答案没有提供任何神奇的答案...还。:)


答案 1

只是为了添加一些特定的设置,我有一个类似的设置(Apache 2.0.63反向代理到Tomcat 5.0.27)。

对于某些URL,Tomcat服务器可能需要20分钟才能返回页面。

我最终修改了Apache配置文件中的以下设置,以防止其代理操作超时(如果Tomcat需要更长的时间才能返回页面,则具有较大的溢出因素):

Timeout 5400
ProxyTimeout 5400

一些背景

仅靠ProxyTimeout是不够的。查看Timeout的文档,我猜(我不确定)这是因为当Apache等待Tomcat的响应时,Apache和浏览器(或任何http客户端)之间没有流量流动 - 因此Apache关闭了与浏览器的连接。

我发现,如果我将超时设置保留为默认值(300秒),那么如果对Tomcat的代理请求花费超过300秒才能获得响应,浏览器将显示“502代理错误”页面。我相信这个消息是由Apache生成的,因为它知道它在关闭与浏览器的连接之前充当反向代理(这是我目前的理解 - 它可能是有缺陷的)。

代理错误页面显示:

代理错误

代理服务器收到来自上游服务器的无效响应。代理服务器无法处理请求 GET。

原因:从远程服务器读取时出错

...这表明是ProxyTimeout设置太短,而调查显示Apache的超时设置(Apache和客户端之间的超时)也会影响这一点。


答案 2

所以,在这里回答我自己的问题。我们最终确定,由于 Tomcat 线程超时,我们在负载均衡器中看到了 502 和 503 错误。在短期内,我们增加了超时。从长远来看,我们首先修复了导致超时的应用问题。为什么 Tomcat 超时在负载均衡器上被视为 502 和 503 错误仍然是一个谜。


推荐