2011-08-06 9 views
0

特定のCookieセット(c_cntry)を持たない受信リクエストを送信したいのですが、リクエストURLに国の値が内部のパスc_cntryの正しい設定を把握しようとするサービスです。RewriteCondでリバースプロキシを使用しているhttpd2.2が無限ループに入ります

ブラウザでhttp://localhost:8085/something-to-doのようなものを送信すると、ログに無限の再帰があり、最終的にブラウザの502プロキシエラーが発生します。ログには、ProxyPassディレクティブに指定されたlocalhost:9999が触れられていないことが示されています。

この問題を解決するには大変感謝します。

のhttpd.conf

RewriteLogLevel 3 

RewriteRule .*\.php$ - [L] 

#req doesnot have country nor is a good cookie present -- send it for geo-discovery 

RewriteCond %{REQUEST_URI} !^/(usa|india)/ 
RewriteCond %{HTTTP_COOKIE} !u_cntry=(usa|india) 
RewriteRule (.*) /GeoDiscover?orig=($1) [QSA,P] 

ProxyRequests Off 
ProxyPreserveHost On 
ProxyTimeout 5 
ProxyPass /GeoDiscover http://localhost:9999/GeoDiscover connectiontimeout=1 timeout=3 retry=3 
ProxyPassReverse /GeoDiscover http://localhost:9999/GeoDiscover 

REWRITEログ:

127.0.0.1 - - [06/Aug/2011:12:07:58 +0530] "GET /ex2.php HTTP/1.1" 200 42 server:some-server-name file:C:/myhtdocs/ex2.php 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /something-to-do HTTP/1.1" 502 409 server:some-server-name file:proxy:http://localhost:8085/GeoDiscover?orig=(/something-to-do) 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /GeoDiscover?orig=(/something-to-do) HTTP/1.1" 502 401 server:some-server-name file:proxy:http://localhost:8085/GeoDiscover?orig=(/GeoDiscover)&orig=(/something-to-do) 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /GeoDiscover?orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/something-to-do) HTTP/1.1" 502 401 server:some-server-name file:proxy:http://localhost:8085/GeoDiscover?orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/something-to-do) 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /GeoDiscover?orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/something-to-do) HTTP/1.1" 502 401 server:some-server-name file:proxy:http://localhost:8085/GeoDiscover?orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/something-to-do) ... 

アクセスログ

127.0.0.1 - - [06/Aug/2011:12:07:58 +0530] "GET /ex2.php HTTP/1.1" 200 42 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "-" "-" 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /something-to-do HTTP/1.1" 502 409 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "127.0.0.1" "localhost:8085" 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /GeoDiscover?orig=(/something-to-do) HTTP/1.1" 502 401 "-" "Mozilla/5.0(Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "127.0.0.1, 127.0.0.1" "localhost:8085, localhost:8085" 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /GeoDiscover?orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/something-to-do) HTTP/1.1" 502 401 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "127.0.0.1, 127.0.0.1, 127.0.0.1, 
127.0.0.1" "localhost:8085, localhost:8085, localhost:8085, localhost:8085" 
127.0.0.1 - - [06/Aug/2011:12:08:02 +0530] "GET /GeoDiscover?orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/GeoDiscover)&orig=(/something-to-do) HTTP/1.1" 502 401 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "127.0.0.1, 127.0.0.1, 127.0.0.1, 
127.0.0.1, 127.0.0.1" "localhost:8085, localhost:8085, localhost:8085, localhost:8085, localhost:8085" ... 

ERRORログ

[Sat Aug 06 12:08:02 2011] [debug] mod_proxy_htttp.c(56): proxy: HTTP: canonicalising URL //localhost:8085/GeoDiscover 
[Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(1525): [client 127.0.0.1] proxy: *: found reverse proxy worker for http://localhost:8085/GeoDiscover?orig=(/something-to-do) 
[Sat Aug 06 12:08:02 2011] [debug] mod_proxy.c(1015): Running scheme http handler (attempt 0) 
[Sat Aug 06 12:08:02 2011] [debug] mod_proxy_htttp.c(1973): proxy: HTTP: serving URL http://localhost:8085/GeoDiscover?orig=(/something-to-do) 
[Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(2011): proxy: HTTP: has acquired connection for (*) 
[Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(2067): proxy: connecting http://localhost:8085/GeoDiscover?orig=(/something-to-do) to localhost:8085 
[Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(2193): proxy: connected /GeoDiscover?orig=(/something-to-do) to localhost:8085 
[Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(2444): proxy: HTTP: fam 2 socket created to connect to * 
[Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(2576): proxy: HTTP: connection complete to 127.0.0.1:8085 (localhost) 
[Sat Aug 06 12:08:02 2011] [debug] mod_proxy_http.c(56): proxy: HTTP: canonicalising URL //localhost:8085/GeoDiscover^M [Sat Aug 06 12:08:02 2011] [debug] proxy_util.c(1525): [client 127.0.0.1] proxy: *: found reverse proxy worker for http://localhost:8085/GeoDiscover?orig=(/GeoDiscover)&orig=(/something-to-do) 
[Sat Aug 06 12:08:02 2011] [debug] mod_proxy.c(1015): Running scheme http handler (attempt 0 
[Sat Aug 06 12:08:02 2011] [debug] mod_proxy_http.c(1973): proxy: HTTP: serving URL http://localhost:8085/GeoDiscover?orig=(/GeoDiscover)&orig=(/something-to-do) 

答えて

0

1つの以上の書き換え条件を追加してみてください:

RewriteCond %{REQUEST_URI} !^/(usa|india)/ 
RewriteCond %{REQUEST_URI} !^/GeoDiscover 
RewriteCond %{HTTTP_COOKIE} !u_cntry=(usa|india) 
RewriteRule (.*) /GeoDiscover?orig=($1) [QSA,P] 

P.S.:

RewriteCond %{REQUEST_URI} !^/GeoDiscover 

その後、あなたの書き換えルールは次のようになります。 書き換えログあなたが提供しているのは、実際の書き換えログではないと思います(少なくとも私はGET、レスポンスコードなど前に述べたようなフォーマットは見ていません)。

P.P.S. デバッグを書き直す際には、RewriteLogLevel 9を使用するとより詳細な出力が得られます(多すぎるため、稼働中のサーバでは使用できませんが、何が起こっているかを正確に伝えます)。

+0

こんにちはL.Oさん、ありがとうございました。
私は[L]ルールを適用した後で、それが自動的にプロキシ設定を行うことを間違って想定していました。 を正確に実行していない(非常に困惑していますが、私はそれを理解しなければなりません)。 私が代わりにしたのは、[L]を[N]に変更し、(ii)提案したように[P]ルール を先行させることでした。 // localhostを:9999/$ 1 $ 2 [QSA、P]
これは罰金働い| /.*)$ HTTP
#rule 0
のRewriteRule(^ GeoDiscover)(:だから、次のようになります。 ProxyPassReverseはまだ有効であると私は信じている。 ありがとう Dinesh
PS:ログは本当です! – dinesh

関連する問題