2012-08-07 24 views
12

gente, Estamos tratando de configurar Apache proxy inverso para el siguiente escenario:ProxyPassMatch con ProxyPassReverse

  • Las solicitudes entrantes toman la forma http://foo.com/APP/v1/main.html
  • Para algunos servidores de la URL hará referencia a una versión diferencia, por ejemplo, http://foo.com/APP/v2/main.html
  • Un equilibrador de carga en sentido ascendente (HAProxy) enviará la solicitud al servidor correcto que tendrá un proxy inverso Apache2 al frente de un servidor JBoss.
  • Cuando la solicitud se presenta en Apache 2 que tendrá como ruta de solicitud /APP/v1/main.html
  • Queremos que proxy (inversa) a http://localhost:8080/AppContext/main.html, independientemente del fragmento de la versión en la URL (v1, v2, etc.).

He estado tratando de hacerlo de esta manera:

ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1 
ProxyPassReverse /APP http://localhost:8080/AppContext 

Mis preguntas son:

  1. ¿Es mi uso de ProxyPassMatch correcta?
  2. Mi ProxyPassReverse es "estático". ¿Cómo lo hago consciente de las cosas potencialmente variables después de /APP?

Gracias por cualquier idea.

-Raj

Respuesta

8

estás cerca, trate de cambiar la expresión regular un poco para tener en cuenta el fragmento de la versión:

ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1 

El ProxyPassReverse es sobre todo para asegurar la reescritura sobre la marcha de la ubicación campos de encabezado en las respuestas dadas por la aplicación proxy. Por lo tanto, cuando devuelve un redireccionamiento 301 a, digamos, http://localhost:8080/AppContext/something, apache sabe cambiarlo a /APP/v1/something para que la información que se encuentra detrás del proxy no se vea expuesta. Como tiene una URL dinámica utilizada en el proxy inverso, tiene algunas opciones aquí. Puede enviarlo al equilibrador de carga de HAProxy (no está seguro de dónde es para usted), o puede simplemente elegir uno y esperar lo mejor. Por ejemplo, si usted tiene un equilibrador de carga en /APP/balancer/ que luego envía las solicitudes a /APP/v1/, /APP/v2/, /APP/v3/, etc A continuación, puede hacer esto:

ProxyPassReverse /APP/balancer http://localhost:8080/AppContext 

De lo contrario, sólo puede apuntar a uno y esperanza para el mejor:

ProxyPassReverse /APP/v1 http://localhost:8080/AppContext 
+0

Gracias Jon por la pronta respuesta. Estamos tratando de mantener nuestra configuración de Apache libre de entradas específicas de la versión para tener una plantilla homogénea que se pueda desplegar libremente en el clúster. Parece que la cosa ProxyPassReverse no se puede realizar de manera confiable. ¿Sugerirías lograr esto a través de algún tipo de módulo de reescritura? – Raj

+0

@Raj Reescribir no va a ayudar, porque esto es en la otra dirección. El servidor de aplicaciones intenta redirigir una solicitud, no sabe nada sobre la URL real que se está utilizando para acceder a ella, por lo que solo dice: "Vaya a http: // localhost: 8080/AppContext/something", que el navegador devolverá un 404 porque la computadora en la que está el navegador no tiene un servidor de aplicaciones ejecutándose en el puerto localhost 8080 –

Cuestiones relacionadas