当前位置:  开发笔记 > 编程语言 > 正文

Apache mod_proxy和Tomcat出现Bad Gateway 502错误

如何解决《Apachemod_proxy和Tomcat出现BadGateway502错误》经验,为你挑选了3个好方法。

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

错误的网关!代理服务器从上游服务器收到无效响应.

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

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

如果您认为这是服务器错误,请与网站管理员联系.

错误502

Tomcat有很多线程,因此它不受线程限制.我们正在通过JMeter推动2400名用户对抗该应用.所有的盒子都位于我们的防火墙内快速卸载的网络上,所以不应该有任何网络问题.

任何人有什么建议可以看待或尝试?接下来我们将前往tcpdump.

更新10/21/08:仍然没有想到这一点.只看到极少数这些负载.下面的答案还没有提供任何神奇的答案.:)



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关闭了与浏览器的连接.

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

代理错误页面说:

代理错误

代理服务器从上游服务器收到无效响应.代理服务器无法处理请求GET.

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

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



2> Alex Miller..:

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



3> Janning..:

您可以使用proxy-initial-not-pooled

请参阅http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html:

如果设置了此变量,则如果客户端连接是初始连接,则不会重用池化连接.这避免了由代理进行连接检查后以及代理发送的数据到达后端之前后端服务器关闭池连接的竞争条件导致的"代理:来自远程服务器的错误读取状态行"错误消息.必须记住,设置此变量会降低性能,尤其是对于HTTP/1.0客户端.

我们也有这个问题.我们通过添加来修复它

SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1

并打开keepAlive所有服务器.

mod_proxy_http在大多数情况下都很好,但是我们在负载很重的情况下运行它,我们仍然遇到一些我们不理解的超时问题.

但请查看上述指令是否符合您的需求.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有