在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