Apache proxy_http redirige a ip y establece el nombre de host

16

espero que ustedes puedan ayudarme con un problema de proxy que tengo.

Lo que ya tengo

He configurado un proxy inverso http apache, para proxy de solicitudes de * .proxy.domain a * .intern.domain. El apache es la única forma de llegar a mis aplicaciones web internas desde una red externa.

Ejemplo:

app.proxy.domain -> app.intern.domain
mail.proxy.domain -> mail.intern.domain

Todo esto funciona muy bien, pero tengo el siguiente problema.

Problema
Quiero proxy las siguientes solicitudes:

app.proxy.domain -> app.internal.domain
app-dev.proxy.domain -> app-dev.internal.domain

Esto no es un problema, pero desafortunadamente el servidor app-dev ejecuta una copia exacta de la aplicación web de los servidores de aplicaciones, y esta aplicación solo responde a su nombre de host (app.intern.domain)

Entonces, lo que necesito hacer es representar lo siguiente

app.proxy.domain -> app.internal.domain (10.0.1.1)
app-dev.proxy.domain -> app.internal.domain (10.0.1.2)

Puedo hacer lo segundo, agregando "10.0.1.2 app.internal.domain" en / etc / hosts, pero eso también significa que app.proxy.domain aterrizará en el servidor de desarrollo.

Estoy buscando una opción, para establecer la entrada / etc / hosts solo dentro del archivo de configuración de vhost para app-dev.proxy.domain, de modo que cualquier otra configuración de vhost solo use DNS para app.intern.domain.

Pensamientos ...

¿Hay alguna manera de decirle a apache config, a

ProxyPass / http://10.0.1.2/

pero envía app.intern.domain como nombre de host?

Editar la aplicación web de servidores de desarrollo para escuchar app-dev no es una opción, ya que se supone que es una copia exacta (no es mi decisión ...)

¡Gracias!

mohrphium
fuente

Respuestas:

34

Posiblemente podría usar mod_headers junto con mod_proxy. Sin embargo, no lo he probado.

Entonces, para su aplicación-dev vhost, podría tener:

RequestHeader set Host "app.internal.domain"

y luego agregarías:

ProxyPreserveHost On
Piotr
fuente
2
La configuración ProxypreserveHost hizo el truco perfectamente. ¡Gracias!
Algunos Linux Nerd
3

Una solución fea es usar (más bien: abusar) el / etc / hosts para apuntar app.internal.domain a localhost y luego configurar Apache para escuchar dos puertos adicionales, uno para cada aplicación y app-dev. Entonces, proxy inverso dos veces:

Listen 80
Listen 127.0.0.1:8001
Listen 127.0.0.1:8001

<VirtualHost *:80>
   ServerName app.proxy.domain
   ProxyPass / http://app.internal.domain:8001
</VirtualHost>
<VirtualHost *:80>
   ServerName app-dev.proxy.domain
   ProxyPass / http://app.internal.domain:8002
</VirtualHost>
<VirtualHost 127.0.0.1:8001>
   ServerName app.internal.domain
   ProxyPreserveHost On
   ProxyPass / http://10.0.1.1/
</VirtualHost>
<VirtualHost 127.0.0.1:8002>
   ServerName app.internal.domain
   ProxyPreserveHost On
   ProxyPass / http://10.0.1.2/
</VirtualHost>
HBruijn
fuente
2

Agregar a la configuración del proxy inverso (foe app-dev.proxy ..):

RequestHeader edit Host ^app-dev.proxy.domain app.proxy.domain

Tienes que habilitar mod_headers de antemano:

a2enmod headers

El servidor interno 10.0.1.2 debería tener

ServerName app.proxy.domain
grafzero
fuente