Apache 2.2 与 tomcat 的反向代理连接挂起然后返回 502 代理错误

Apache 2.2 与 tomcat 的反向代理连接挂起然后返回 502 代理错误

我在跑步:

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% 确定它是否已修复,但似乎已经修复。如果这不是正确答案,我会回复。

相关内容