这个错误一直让我疯狂.我们有一台运行Apache和Tomcat的服务器,服务于多个不同的站点.通常情况下,服务器运行正常,但有时会发生错误的时候,人们都提供了错误的页面- 页面是别人请!
线索:
JkMount内的指令<VirtualHost>是正确的.更多的信息:
Apache没有打开任何形式的缓存.httpd.conf和相关导入中的所有与缓存相关的条目都说明,例如:
<IfDefine CACHE>
LoadModule cache_module modules/mod_cache.so
</IfDefine>
Run Code Online (Sandbox Code Playgroud)
虽然Apache的选项不包含该标志:
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D JK"
Run Code Online (Sandbox Code Playgroud)
Tomcat同样没有打开缓存选项,我可以找到.
toolkit的建议很好,但在这种情况下不合适.是什么让我相信错误不在我自己的代码中是因为它不仅仅是一些正在传输的值 - 它是整个请求,包括URL,参数,会话cookie,整个事情.人们正在回复说"你以约翰身份登录",而他们显然没有.
更新:
根据几个人的建议,我将向Tomcat提供的页面添加以下HTTP标头,以禁用所有形式的缓存:
Cache-Control: no-store
Vary: *
Run Code Online (Sandbox Code Playgroud)
希望这些标题不仅受到Apache的尊重,还受到可能阻碍的任何其他缓存或代理的尊重.不幸的是我无法故意重现这个错误,所以我只能等待,看看它是否再次出现.
我注意到包含以下标题 - 它们是否可能以任何方式相关?
Connection: Keep-Alive
Keep-Alive: timeout=5, max=66
Run Code Online (Sandbox Code Playgroud)
更新:
显然,当我睡着的时候,这又发生了,但现在已经停止了,我很清醒地看到了它.再一次,在我看到的日志中没有任何用处,所以我没有找到实际发生的事情或如何防止它的线索.
我可以在Apache或Tomcat的日志中添加任何额外的信息,以便更容易诊断吗?
更新:
由于这已经发生了几次,我们已经改变了Apache连接到Tomcat的方式,看它是否会影响事物.我们正在使用这样mod_jk的指令:
JkMount /portal ajp13
Run Code Online (Sandbox Code Playgroud)
我们现在切换到使用mod_proxy_ajp,如下所示:
ProxyPass /portal …Run Code Online (Sandbox Code Playgroud)