2011-08-06 38 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 LOG:

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" ... 

錯誤日誌

[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

嘗試增加一個重寫條件:

RewriteCond %{REQUEST_URI} !^/GeoDiscover 

然後你重寫規則應該是這樣的:

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

附: 您提供的重寫日誌 - 我不認爲它是實際的重寫日誌(至少我沒有看到過這樣的格式,其中提到了GET,200響應代碼等)。

P.P.S. 在進行重寫調試時(更好地使用RewriteLogLevel 9),它會產生更詳細的輸出(可能太多,因此無法在工作服務器上使用,但它會準確告訴發生了什麼)。

+0

嗨L.O.,感謝您的幫助。
我錯誤地認爲應用[L]規則 後,它會自動通過代理設置。這並不是完全(非常令人困惑,我仍然需要弄清楚)。 因此,我所做的是(i)將[L]更改爲[N],並且(ii)如您所建議的那樣預先設定[P]規則 。所以現在看起來是這樣的:
#rule 0
重寫規則(^ GeoDiscover)(| /.*)$的http://本地主機:9999/$ 1 $ 2 QSA,P]
此制定了罰款。我相信ProxyPassReverse將 仍然有效。 謝謝 Dinesh
PS:日誌是真實的! – dinesh