全て -
リバース プロキシで、受信 URI の末尾にクエリ文字列引数を自動的に追加しようとしていますが、mod-rewrite が奇妙なことをしているようです。
次のようなルールを使用する場合:
RewriteEngine On # Turn on the rewriting engine
RewriteRule /t/SkunkWorks/views/LabelLocalization/Dashboard$ /t/SkunkWorks/views/LabelLocalization/Dashboard\?Language=3 [L,PT]
#####Proxy Rule
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://server8/
ProxyPassReverse / http://server8/
AllowEncodedSlashes On
Apache が Fiddler を使用して以下を実行していることがわかります。
http://192.168.203.34:9089/t/SkunkWorks/views/LabelLocalization/Dashboard?Language=3
これまでのところ良い。
また、リバース プロキシが通過するマシンにリクエストが到着していることもわかります。
192.168.203.34 - - [19/Apr/2013:11:35:04 -0400] 80 "GET /t/SkunkWorks/views/LabelLocalization/Dashboard?Language=3 HTTP/1.1" "fe80::a53f:6156:2a22:378d, 192.168.203.34" 200 4052 "-" 109186 UXFkKMCoyx0AAAA0Q2UAAAEM
ただし、宛先マシン (192.168.203.29) で作業を行っているアプリは正しく応答しません。特定の言語を使用してレポートを表示するのではなく、ハングします。
http://192.168.203.29/t/SkunkWorks/views/LabelLocalization/Dashboard?Language=3
アプリ サーバーに対して直接実行すると、レポートは正常にレンダリングされます。問題を引き起こしているのは書き換えルールのようです。
なんで?error.log に次のように表示されます。
[Fri Apr 19 10:55:55.194288 2013] [rewrite:trace2] [pid 13240:tid 712] mod_rewrite.c(468): [client fe80::a53f:6156:2a22:378d:32996] fe80::a53f:6156:2a22:378d - - [simpleprime/sid#982130][rid#dbcd50/initial] init rewrite engine with requested uri /t/SkunkWorks/views/LabelLocalization/Dashboard
[Fri Apr 19 10:55:55.194288 2013] [rewrite:trace3] [pid 13240:tid 712] mod_rewrite.c(468): [client fe80::a53f:6156:2a22:378d:32996] fe80::a53f:6156:2a22:378d - - [simpleprime/sid#982130][rid#dbcd50/initial] applying pattern '/t/SkunkWorks/views/LabelLocalization/Dashboard$' to uri '/t/SkunkWorks/views/LabelLocalization/Dashboard'
[Fri Apr 19 10:55:55.194288 2013] [rewrite:trace2] [pid 13240:tid 712] mod_rewrite.c(468): [client fe80::a53f:6156:2a22:378d:32996] fe80::a53f:6156:2a22:378d - - [simpleprime/sid#982130][rid#dbcd50/initial] rewrite '/t/SkunkWorks/views/LabelLocalization/Dashboard' -> '/t/SkunkWorks/views/LabelLocalization/Dashboard?Language=3[L,PT]'
RIGHT HERE ->>>>[Fri Apr 19 10:55:55.194288 2013] [rewrite:trace3] [pid 13240:tid 712] mod_rewrite.c(468): [client fe80::a53f:6156:2a22:378d:32996] fe80::a53f:6156:2a22:378d - - [simpleprime/sid#982130][rid#dbcd50/initial] split uri=/t/SkunkWorks/views/LabelLocalization/Dashboard?Language=3[L,PT] -> uri=/t/SkunkWorks/views/LabelLocalization/Dashboard, args=Language=3[L,PT]**
ルールを単純化して ?Language=3 を削除すると、問題なく動作します。
RewriteRule /t/SkunkWorks/views/LabelLocalization/Dashboard$ /t/SkunkWorks/views/LabelLocalization/Dashboard [L,PT]
でリバースプロキシをヒットできます
http://192.168.203.34/t/SkunkWorks/views/LabelLocalization/Dashboard?Language=3
...そして、それは 192.168.203.29 ボックスに適切に渡されます。マシンは、必要に応じてレポートをレンダリングします。
「URI SPLIT」が問題の原因であると推測しています...なぜなら、error.logにそれが表示されないときに機能し、表示されると壊れるためです。
URI分割を防ぐためにできることはありますか?