![Apache 2.2 与 tomcat 的反向代理连接挂起然后返回 502 代理错误](https://linux22.com/image/675960/Apache%202.2%20%E4%B8%8E%20tomcat%20%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%BF%9E%E6%8E%A5%E6%8C%82%E8%B5%B7%E7%84%B6%E5%90%8E%E8%BF%94%E5%9B%9E%20502%20%E4%BB%A3%E7%90%86%E9%94%99%E8%AF%AF.png)
我在跑步:
Apache/2.2.15 (Unix) on CentOS release 6.6 (Final)
我正在运行一个反向代理,它将请求转发到在 localhost:8080 上运行的 tomcat 服务器。我的配置如下:
<VirtualHost *:80>
....
<Proxy *>
Order deny,allow
Allow from all
AuthType Basic
AuthName “Username/Password”
AuthUserFile /etc/httpd/conf.d/users.auth
Require valid-user
</Proxy>
Setenv proxy-nokeepalive 1
Setenv proxy-sendcl 1
Setenv proxy-initial-not-pooled 1
SetEnv force-proxy-request-1.0 1
ProxyPass /analytics http://localhost:8080/analytics disablereuse=on ttl=1 smax=0
ProxyPassReverse /analytics http://localhost:8080/analytics
你可以看到,我出于绝望把一大堆东西扔在里面——我已经尝试让它工作了好几天。
大多数查询都运行良好,但似乎特别是如果我不使用服务器超过 15 分钟,当我返回时就会挂起,但这似乎只发生在 tomcat 提供的页面上的 POST 请求上。挂起通常会持续 1 分钟,然后出现 502 错误。我也在 GET 页面上看到过这种情况,但不是最近,所以可能是我所做的某些配置更改改变了这种情况。
我已在日志中启用调试并得到:
[Sat Jan 30 21:28:49 2016] [error] [client 192.168.213.24] (70007)The timeout specified has expired: proxy: error reading status line from remote server localhost, referer: http://analytics.mysite.com/analytics/msqlQuery
[Sat Jan 30 21:28:49 2016] [debug] mod_proxy_http.c(1414): [client 192.168.213.24] proxy: read timeout, referer: http://analytics.mysite.com/analytics/msqlQuery
[Sat Jan 30 21:28:49 2016] [debug] mod_proxy_http.c(1465): [client 192.168.213.24] proxy: NOT Closing connection to client although reading from backend server localhost failed., referer: http://analytics.mysite.com/analytics/msqlQuery
[Sat Jan 30 21:28:49 2016] [error] [client 192.168.213.24] proxy: Error reading from remote server returned by /analytics/msqlQuery, referer: http://analytics.mysite.com/analytics/msqlQuery
[Sat Jan 30 21:28:49 2016] [debug] proxy_util.c(2112): proxy: HTTP: has released connection for (localhost)
当我遇到挂起行为时,我根本看不到 tomcat 日志中出现任何内容。我怀疑调用根本无法进行到这一步。
就好像 Apache 认为连接是活动的,但不知何故却不是(尽管我认为我已经将其配置为每次都获取新的连接)
非常感谢您的帮助!
答案1
我很高兴你搞明白了。当我开始阅读你的问题时,我已经在思考“会话”了
我有几个 Java 应用程序在 Apache 中使用反向代理运行,我花了一段时间才让它们正常工作。
答案2
编辑:不,这并没有解决问题。不过公平地说,这次的问题是,当我几个小时后回来时,GET 请求挂起了。当我刷新页面 6 次时,它开始工作了。不过,我在那里也有基本身份验证。真的不知道出了什么问题。
上一篇帖子,当时我以为我已经修复了它:嗯,看起来我可能已经修复了它。当它挂起时,尽管 tomcat 日志中没有任何内容,但我想尝试停止 tomcat,看看下次尝试加载页面时是否会导致连接错误。它确实导致了错误,这让我认为问题可能出在 tomcat 配置中。
我在 web.xml 中修改了这一点:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
到
<session-config>
<session-timeout>1</session-timeout>
</session-config>
也许 tomcat 正在保持该会话?
我还不太明白,也不能 100% 确定它是否已修复,但似乎已经修复。如果这不是正确答案,我会回复。