2010-03-16 9 views
6

Me gustaría reenviar una solicitud en Apache, en función de un encabezado de solicitud, a un proxy reenviado diferente. Creo que lo mejor sería usar mod_rewrite, pero solo puede usar un proxy inverso definido en la misma configuración de apache.Solicitud de reescritura de Apache utilizando un proxy de reenvío diferente

También verifiqué la propiedad ProxyRemote de mod_proxy pero no se puede usar según las condiciones, solo en función de las url de solicitud.

necesito algo como:

Si X-CUSTOM-cabecera es de valor 1 - Solicitud adelante> reenviar proxy de p1 Si X-CUSTOM-cabecera es el valor-2 -> petición hacia adelante para reenviar p2 de proxy

etc.

Din nadie logró hacer algo como esto?

Gracias, Alin

+0

estoy frente a un problema similar. también necesito una solicitud de reenvío y no una solicitud reversa, porque los servidores en sí mismos no tienen los recursos, pero deben buscarlos desde Internet. ¿Ya has encontrado una solución? –

+0

este requisito se eliminó después de todo, por lo que no tuve la oportunidad de probar la solución en producción. – Alin

Respuesta

2

Encontré una solución, no es realmente elegante. También implica cierta adaptación en el segundo servidor.

Se deriva de un proyecto en el que tuve un problema similar, pero necesitaba que los servidores fueran "completamente" (seleccionados mediante un script personalizado que utiliza recursos de la base de datos).

Esto debería al menos funcionar (ejecuto mi URL a través de un mapa de reescritura para modificarlo, lo he adaptado para usar encabezados usando RewriteCond).

# example for server number "5" in your remote proxy network 
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1 
RewriteRule http://([a-z0-9\.]+)/(.*) http://$1.5.server.yourdomain.com$1 [P] 
ProxyRemoteMatch .*\.5\.server\.yourdomain\.com.* http://5.server.yourdomain.com:80 

Es, básicamente, adaptar la URL por lo que es un subdominio de su segundo servidor, a continuación, se tira hacia fuera otra vez.
Esta parte va en el segundo (servidor proxy remoto):

<ProxyMatch "http://.*\.[0-9]+\.server\.yourdomain\.com/.*"> 
    RewriteEngine on 
    RewriteRule (proxy:http[s]?://.+)\.[0-9]+\.server\.premiumize\.me(.+) $1$2 
    ... your code ... 
</ProxyMatch> 
0

que deben ser capaces de lograrlo mediante la directiva RewriteCond verificar con% {HTTP: header}.

intente lo siguiente:

RewriteEngine On 

RewriteCond %{HTTP:X-CUSTOM-HEADER} 1 
RewriteRule (.*) http://p1.example.com$1 [P] 
ProxyPassReverse/http://p1.example.com 

RewriteCond %{HTTP:X-CUSTOM-HEADER} 2 
RewriteRule (.*) http://p2.example.com$1 [P] 
ProxyPassReverse/http://p2.example.com 

espero que ayude. :)

+0

esto es elegante, pero el interlocutor claerly afirma que él está en necesidad de un requset de proxy hacia adelante. por lo que los servidores p1 y p2 deben entregar los recursos de una fuente externa externa, no de ellos directamente. –

1

Prueba esto:

# Prevents Apache from functioning as a forward proxy server (where you don't want) 
ProxyRequests Off 
# Preserve Host in http protocol on destination server 
ProxyPreserveHost On 
<Proxy *> 
    Order deny,allow 
    Allow from all 
</Proxy> 
# enable rewrite engine 
RewriteEngine On 
# check header 
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1 
# execute forward proxy 
RewriteRule (.*) http://server1/$1 [P,L,QSA] 

# check header 
RewriteCond %{HTTP:X-CUSTOM-HEADER} 2 
# execute forward proxy 
RewriteRule (.*) http://server2/$1 [P,L,QSA] 
Cuestiones relacionadas