Apache 2.2.3上的mod_proxy代理到Tomcat 5.5将返回错误502错误的网关

在Apache 2.2.3上使用mod_proxy代理到Tomcat 5.5时,出现502错误的网关错误。

它直接通过Tomcat(而不是通过mod_proxy)使用时正常工作,所以我假设问题是在Apache的结束。 当请求花费比平时更长时,问题就出现了,但是我还没有看到任何模式。 有时候两秒钟太长,有时候七点钟。

Tomcat用于托pipe基于Groovy / Grails的应用程序。

Apache vhostconfiguration有这些相关的条目:

ProxyRequests Off ProxyTimeout 1800 <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ProxyPass http://DOMAIN:8180/ ProxyPassReverse http://DOMAIN:8180/ SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 </Location> UseCanonicalName off HostNameLookups off 

请注意,我已经添加了ProxyTimeout来试图解决这个问题(以前曾经有类似的情况),但并没有帮助。

这两行是旧的,没有他们的情况更糟 – 几乎每个请求上的错误502。

 SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 

更新

您是否尝试过监视Tomcat中的繁忙线程数量? 也许Apache不能正确释放它们。


第一次尝试,不工作

反向域名查找?

我将无耻地插入我的堆栈溢出答案 。 请注意,它允许您使用localhost而不是DOMAIN

 <VirtualHost *:80> ServerName public.server.name ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8180/ ProxyPassReverse / http://localhost:8180/ </VirtualHost> 

虽然不是直接回答你的问题,但是我们用以下方式来做Apache2 < – > Tomcat5代理。 像魅力一样工作。

 RewriteRule ^/$ http://apache.domain/appname/ [R] RewriteRule ^/appname(.*)$ http://tomcat.domain:8081/appname$1 [P] ProxyPassReverse /appname http://tomcat.domain:8081/appname