5 votos

Hosts virtuales Apache y proxy inverso

Tengo muchos hosts virtuales cuyos nombres de dominio se asignan a un único servidor Apache (llamémosle servidor1). En determinadas circunstancias, todas las URL de un determinado host virtual deben ser servidas por un servidor diferente (llamémosle servidor2).

¿Cuál es la forma más fácil de conseguirlo? ¿Puedo simplemente configurar el servidor2 para que use la misma configuración de host virtual basada en nombres que el servidor1, y luego confiar en las cabeceras X-Forwarded-Host del servidor1 (es decir, el servidor2 hará lo correcto basándose sólo en esas cabeceras)? Con "la misma configuración de host virtual basada en nombres" me refiero a los nombres de dominio "reales" (es decir, los nombres de dominio que se asignan a la IP del servidor1).

4voto

Razique Puntos 1557

Puede utilizar el módulo mod_proxy. Funciona bien con vhosts. Básicamente, el servidor principal recibirá todas las peticiones, y cuando se llama a una determinada url/dominio, mod_proxy redirigirá este dominio a otro servidor (servidor 2) se ve así en el servidor 1

<VirtualHost *>
ServerName server1.com
Hosted on the server
</VirtualHost *>

<VirtualHost *>
ServerName server2.com
// mod_proxy directives in order to redirect this domain name to the other server //
</VirtualHost>

Y hay un buen tutorial : http://www.apachetutor.org/admin/reverseproxies

1voto

nos Puntos 200

Acabo de encontrarme con el mismo problema, he explorado dos soluciones:

  1. Reflejar la jerarquía externa en el DNS interno (p. ej. foo.ejemplo.com -> foo.internal.lan , bar.ejemplo.com -> bar.interno.lan etc.); en cada VirtualHost en el frontend se añade el bloque ProxyPass y ProxyPassReverse directivas. Si tiene vhosts, puede crear un catch-all ( ServerAlias *.example.com ) en el frontend y utilizar mod_rewrite ( [P] ) para enviar la solicitud al backend, asignando las solicitudes a los nombres internos.

    Este es el primer enfoque que he probado: funciona bien, pero requiere cambios en la nomenclatura del backend. Si usted no puede tocar el DNS o si el servidor backend ni siquiera tiene un nombre que no se puede utilizar este enfoque.

    Oh, no te olvides de arreglar las galletas con ProxyPassReverseCookieDomain De lo contrario, te quedarás mirando los registros preguntándote por qué las sesiones ya no funcionan ;-)

  2. Utilice un vhost general en el frontend y utilice ProxyPreserveHost on ; en este caso el frontend conserva el Anfitrión: en la solicitud, para que pueda reutilizar su configuración original de vhost en el backend (es decir, el backend ve la solicitud con el nombre externo en la cabecera Host: foo.ejemplo.com )

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X