このエラーは私を夢中にさせています。Apache と Tomcat を実行するサーバーがあり、複数の異なるサイトにサービスを提供しています。通常、サーバーは正常に動作しますが、間違ったページ (他の誰かが要求したページ) が表示されるというエラーが発生することがあります。
手がかり:
- 配信されているページは、別のユーザーが最近要求したページであり、それ以外は正しく配信されています。2 つの同時リクエストがスワップされることが知られています。私が知る限り、誤って配信されたページはどれも、数分以上前のものではありません.
- Tomcat によって提供されているファイルにのみ影響します。画像などの静的ファイルは影響を受けません。
- それはいつも起こるわけではありません。それが起こるとき、それは誰にとっても起こります。
- 需要のピーク時に発生するようです。ただし、需要はまだそれほど高くはありません。Apache が対処できる範囲内にあることは確かです。
- Tomcat を再起動すると修正されましたが、数分間だけでした。Apache を再起動すると修正されましたが、数分間だけでした。
- サーバーは、Gentoo で Java 6 VM を使用して、Apache 2 と Tomcat 6 を実行しています。接続は AJP13 で、ブロック
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
次のようなディレクティブを使用していました。
JkMount /portal ajp13
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の調査を始めます。
アップデート:
くそっ!問題はすぐに戻ってきました。しばらく見てなかったので、やっと整理できたかなと思い始めていました。私はハイゼンバグが嫌いです。