这个错误使我发疯。我们有一台运行Apache和Tomcat的服务器,服务于多个不同的站点。通常,服务器可以正常运行,但是有时在错误的页面( 别人 请求 的页面)中 出现错误 。 __
线索:
JkMount
<VirtualHost>
更多的信息:
Apache尚未打开任何形式的缓存。例如,httpd.conf中所有与缓存相关的条目以及相关的导入都说明:
<IfDefine CACHE> LoadModule cache_module modules/mod_cache.so </IfDefine>
虽然Apache的选项不包含该标志:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D JK"
Tomcat同样没有找到我可以找到的缓存选项。
工具箱的建议]很好,但在这种情况下不合适。使我相信该错误不会出现在我自己的代码中的原因是,它不仅仅是传递了几个值- 而是整个请求,包括URL,参数,会话cookie,整个过程。人们回传的页面明显是“您以John身份登录”。
更新:
基于一些人的建议,我将向Tomcat服务的页面添加以下HTTP标头,以禁用所有形式的缓存:
Cache-Control: no-store Vary: *
希望这些标头不仅会受到Apache的尊重,而且还会受到其他可能妨碍其访问的缓存或代理的尊重。不幸的是,我没有办法故意重现此错误,因此我将不得不等待,看看它是否再次出现。
我注意到其中包含以下标头-它们可以以任何方式关联吗?
Connection: Keep-Alive Keep-Alive: timeout=5, max=66
显然,这是在我入睡时再次发生的,但是现在我已经醒了,现在已经停止了。同样,日志中没有任何有用的信息,因此我不了解实际发生的情况或如何防止发生这种情况。
我可以在Apache或Tomcat的日志中添加任何其他信息,以使其更易于诊断吗?
由于这种情况已经发生了两次,因此我们更改了Apache连接到Tomcat的方式,以查看它是否影响事物。我们使用mod_jk的是这样的指令:
mod_jk
JkMount /portal ajp13
我们现在已切换为使用mod_proxy_ajp,如下所示:
mod_proxy_ajp
ProxyPass /portal ajp://localhost:8009/portal
我们将看看是否有任何不同。这个错误总是令人讨厌地无法预测,因此我们永远不能确切地说出它是否有效。
我们只是在剩下使用的mod_jk网站上短暂得到了错误,而使用同一台服务器上的姐妹网站mod_proxy_ajp却没有显示该错误。这并不能证明任何事情,但是确实提供了证据,证明使用mod_proxy_ajp可能有所帮助。
昨晚我们在使用的网站上再次收到了错误消息mod_proxy_ajp,很明显,该错误尚未解决- mod_jk并不是问题的根源。我将尝试关闭持久连接的匿名建议:
KeepAlive Off
如果同样失败,我将绝望地开始研究GlassFish。
该死!问题又回来了。我已经有一段时间没有看到它了,所以我开始认为我们终于可以对它进行排序了。我讨厌黑醋栗虫。
我们将Apache从使用AJP代理转换为使用HTTP代理。到目前为止,它似乎已经解决了该问题,或者至少已大大减少了它- 几个月没有报告该问题了,此后该应用的使用量有所增加。
更改位于Apache的httpd.conf中。开始于mod_jk:
我们切换到mod_proxy_ajp:
然后最后直行mod_proxy:
mod_proxy
ProxyPass /portal http://localhost:8080/portal
您需要确保Tomcat设置为在端口8080上提供HTTP服务。并且请记住,如果要提供/,则需要/在代理的两面都包含它,否则它会开始哭泣:
/
ProxyPass / http://localhost:8080/