Apache 2.2.3 上的 mod_proxy 代理 Tomcat 5.5 返回错误 502 Bad Gateway

Apache 2.2.3 上的 mod_proxy 代理 Tomcat 5.5 返回错误 502 Bad Gateway

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

直接通过 Tomcat(而不是通过 mod_proxy)使用时,它可以正常工作,因此我认为问题出在 Apache 端。当请求需要比正常情况长但我还没有发现任何规律。有时两秒太长,有时七秒太长。

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

Apache vhost 配置具有以下相关条目:

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

答案1

更新

您是否尝试过监控 Tomcat 中的繁忙线程数?也许 Apache 没有正确释放它们。


首次尝试,没有成功

反向名称查找DOMAIN

我要厚颜无耻地插话我的堆栈溢出答案。请注意,它允许您使用 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>

答案2

虽然这不是您问题的直接答案,但我们过去常常以以下方式执行 Apache2<->Tomcat5 代理。效果非常好。

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

相关内容