我在一台机器上使用apache来为另一台机器上的jboss提供请求。当我启动jboss并且我能够访问Web应用程序时,一切正常,但几个小时后我终于开始收到“代理服务器收到来自上游服务器的无效响应”错误。如果我重新启动jboss然后一切正常,但几个小时后我有同样的问题......
有人知道可能导致此问题的原因吗?我此时无法访问apache日志(我应该在几个小时内),但它似乎与jboss有关,因为重新启动它是临时修复。
我正在使用jboss4.2.3和apache 1.3和mod_jk。我没有在jboss日志中找到任何错误,我想要达到的应用程序没有做任何需要很长时间的事情。主页面只是一个简单的登录页面。我打开了端口8009和8080,用于在应用服务器和Web服务器之间进行通信。我不知道配置是什么错误。
答案 0 :(得分:6)
这听起来像Apache中的mod_jk与JBoss中的AJP连接器不同步。 AJP协议使用Web服务器和应用服务器之间的持久,重用连接,如果协议的两端配置不完全相同,最终连接在连接的一端变得陈旧,但另一端一直试图使用它们。症状是502错误。
我的第一个建议是:除非你需要,否则不要使用mod_jk。它很复杂,很难配置以获得稳定的系统。如果您不需要其性能或负载平衡功能,我建议使用mod_proxy。它对大多数应用程序来说都很好,非常简单。
但是如果你想坚持使用mod_jk,首先要确保你使用最新的mod_jk版本(目前为1.2.28),因为旧版本的配置非常难。幸运的是,Apache 1.3仍然支持mod_jk。
接下来,检查mod_jk日志文件(使用JkLogFile指令配置)。如果您在出现问题时看到一堆与连接相关的错误,则需要在连接的两端调整jk配置。最可能的罪魁祸首是超时设置,所以read up about those here,并确保两端都是用相同的赞美诗唱歌。
答案 1 :(得分:2)
我也看到过这种情况发生在使用apache和tomcat。在我的特定情况下,部署到tomcat的应用程序有一个导致响应线程挂起的错误。最终tomcat用尽了工作线程,而apache无法建立连接。
在我们的示例中,数据库连接未正确释放回连接池,而其他线程无限期地等待从池中获取连接。但是,任何无限期保持响应处理线程的东西都可能导致同样的问题。
答案 2 :(得分:0)
我遇到了同样的问题,但Apache和Glassfish。最后,我可以修复它在双方配置相同的超时。
在Glassfish中更改侦听器配置,并在Apache中使用此行修改worker.properties:
worker.worker_name.socket_timeout=300
我不确定在JBoss中配置它的方法,可能正在修改web.xml
或cluster-service.xml
。
答案 3 :(得分:0)
如果您将 Apache 与 Tomcat 连接起来,并且像我一样在此博客中结束,那就有意义了。
在tomcat中接受AJP / 1.3的连接为我解决了这个错误。不要忘记在HTTP协议上注释掉该服务。
**<!--<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<Connector port="8081" protocol="AJP/1.3"
connectionTimeout="20000"
redirectPort="8443" />**