2012-01-25 6 views
5

Ho un server Apache che funziona come proxy inverso nella nostra DMZ. Abbiamo un servizio esterno che invia di nuovo a un determinato URL su questo server. Ora è necessario che questo servizio effettui il reinserimento su un'applicazione completamente nuova, ma molto probabilmente cambierà nuovamente nel prossimo futuro mentre ci troviamo in una fase di test in questo momento.Apache Riscrivi quindi Proxy Pass

Quindi, per risolvere questo problema, sto tentando di rispondere alla richiesta di postback in arrivo, /smsPostback.php, e di riscriverlo su un nuovo URL relativo, /SMSHandler/Process. Questa parte sta funzionando.

Tuttavia definito immediatamente sotto nella configurazione, ho una direttiva ProxyPass per proxy tutto il traffico a /SMSHandler a un server interno.

Queste sono le nuove linee dal file 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 

E questi sono i registri del registro di riscrittura:

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] 

e questa è la voce di registro di errore da apache:

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

Qualsiasi idea sul motivo per cui non inverte mai proxy della richiesta, ma cerca (e non riesce) a servirlo localmente ?? Grazie!

risposta

14

È necessario aggiungere un PT (PassThrough) al RewriteRule in modo che apache prenda l'URI riscritto e lo restituisca attraverso la pipeline di gestione degli URL (in modo che mod_proxy possa gestirlo). La regola dovrebbe essere simile a questa:

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

Grazie Jon! L'ha fatto! – Matt

+2

è possibile rilasciare 'Ultimo ', è implicito con Passthrough http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_pt – oberhamsi