2012-01-25 11 views
5

Tengo un servidor apache que funciona como un proxy inverso en nuestra DMZ. Tenemos un servicio externo que publica de nuevo a una URL particular en este servidor. Ahora es necesario que este servicio realice una devolución de datos a una aplicación completamente nueva, pero es probable que esto vuelva a cambiar en el futuro cercano, ya que estamos en una fase de prueba en este momento.Apache Rewrite then Proxy Pass

Para resolver esto, intento tomar la solicitud de devolución de datos entrante, /smsPostback.php, y reescribirla en una nueva URL relativa, /SMSHandler/Process. Esta parte está funcionando.

Sin embargo, definido inmediatamente a continuación en la configuración, tengo una directiva ProxyPass para proxy todo el tráfico a /SMSHandler a un servidor interno.

Estas son las nuevas líneas del archivo de 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 

Y estos son los registros del registro de reescritura:

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] 

y esta es la entrada de registro de errores de Apache:

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

Cualquier idea de por qué nunca reverso proxy la solicitud, sino que intenta (y falla) a servirlo localmente? ¡Gracias!

Respuesta

14

Debe agregar PT (PassThrough) a su RewriteRule para que apache tome el URI reescrito y lo reenvíe a través de la canalización de manejo de URL (para que mod_proxy pueda manejarlo). La regla debería verse así:

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

Gracias Jon! Eso lo hizo! – Matt

+2

puede soltar el 'Último', está implícito en Passthrough http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_pt – oberhamsi