2012-01-25 44 views
5

我有一個在我們的DMZ中作爲反向代理的apache服務器。我們有一個外部服務,可以回傳給這臺服務器上的特定網址。現在需要將此服務回發給全新的應用程序,但由於我們目前正處於測試階段,因此很可能在不久的將來再次發生更改。Apache Rewrite然後代理通行證

因此,爲了解決這個問題,我試圖將傳入的回發請求/smsPostback.php重寫爲一個新的相對URL /SMSHandler/Process。這部分工作。

但是,在配置中立即定義下面,我有一個ProxyPass指令代理所有流量到/SMSHandler到內部服務器。

這些都是從Apache的conf文件中的新行:

RewriteRule ^/smsPostback.php$ /SMSHandler/Process 
##Proxy pass smshandler 
ProxyPass /SMSHandler http://172.29.61.49:8080/SMSHandler 
ProxyPassReverse /SMSHandler http://172.29.61.49:8080/SMSHandler 

而這些都是從重寫日誌日誌:

172.29.61.49 - - [24/Jan/2012:18:43:36 --0500] [test.hidden.com/sid#5eace0][rid#446b770/initial] (2) init rewrite engine with requested uri /smsPostback.php 
172.29.61.49 - - [24/Jan/2012:18:43:36 --0500] [test.hidden.com/sid#5eace0][rid#446b770/initial] (3) applying pattern '^/smsPostback.php$' to uri '/smsPostback.php' 
172.29.61.49 - - [24/Jan/2012:18:43:36 --0500] [test.hidden.com/sid#5eace0][rid#446b770/initial] (2) rewrite '/smsPostback.php' -> '/SMSHandler/Process' 
172.29.61.49 - - [24/Jan/2012:18:43:36 --0500] [test.hidden.com/sid#5eace0][rid#446b770/initial] (2) local path result: /SMSHandler/Process 
172.29.61.49 - - [24/Jan/2012:18:43:36 --0500] [test.hidden.com/sid#5eace0][rid#446b770/initial] (2) prefixed with document_root to C:/hidden.com/SMSHandler/Process 
172.29.61.49 - - [24/Jan/2012:18:43:36 --0500] [test.hidden.com/sid#5eace0][rid#446b770/initial] (1) go-ahead with C:/hidden.com/SMSHandler/Process [OK] 

這是Apache的錯誤日誌條目:

[Tue Jan 24 18:43:36 2012] [error] [client 172.29.61.49] File does not exist: C:/fmfacilitymaintenance.com/SMSHandler 

任何想法,爲什麼它從不反向代理請求,而是嘗試(並失敗)在當地提供服務?謝謝!

回答

14

您需要將PT(PassThrough)添加到您的RewriteRule中,以便apache獲取重寫的URI並通過URL處理管道將其傳回(以便mod_proxy可以處理它)。規則應該是這樣的:

RewriteRule ^/smsPostback.php$ /SMSHandler/Process [L,PT] 
+0

謝謝喬恩!那樣做了! – Matt

+2

你可以放棄'最後一個',它暗含着直通http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_pt – oberhamsi