Apache proxy_http redireciona para ip e configura hostname

12

espero que vocês possam me ajudar com um problema de proxy que eu tenho.

O que eu já tenho

Eu configurei um proxy reverso http do apache para solicitações de proxy de * .proxy.domain para * .intern.domain. O apache é a única maneira de acessar meus aplicativos da Web internos a partir de uma rede externa.

Exemplo:

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

Isso tudo está funcionando muito bem, mas tenho o seguinte problema.

Problema
Desejo fazer o proxy das seguintes solicitações:

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

Isso não é problema, mas infelizmente o servidor app-dev executa uma cópia exata do aplicativo da web dos servidores de aplicativos, e este webapplication responde apenas ao seu nome de host (app.intern.domain)

Então, o que eu preciso fazer é usar o seguinte proxy

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

Eu posso fazer a segunda coisa, adicionando "10.0.1.2 app.internal.domain" em / etc / hosts, mas isso também significa que app.proxy.domain irá parar no servidor de desenvolvimento.

Estou procurando uma opção, para definir a entrada / etc / hosts somente dentro do arquivo de configuração do vhost para app-dev.proxy.domain, para que todas as outras configurações vhost usem apenas o DNS para app.intern.domain.

Pensamentos ...

Existe uma maneira de dizer a configuração do apache, para o

ProxyPass / http://10.0.1.2/

mas envia app.intern.domain como hostname?

Editar o aplicativo da web dev-servers para ouvir app-dev não é uma opção, já que é uma cópia exata (não é minha decisão ...)

Obrigado!

    
por mohrphium 25.11.2013 / 13:25

3 respostas

22

Possivelmente você poderia usar mod_headers em conjunto com mod_proxy. Eu não testei embora.

Portanto, para o seu vhost app-dev você poderia ter:

RequestHeader set Host "app.internal.domain"

e, em seguida, você adicionaria:

ProxyPreserveHost On
    
por 25.11.2013 / 15:34
3

A solução feia é usar (em vez de: abuse) o / etc / hosts para apontar app.internal.domain para localhost e, em seguida, configurar o Apache para ouvir duas portas adicionais, uma para cada app e app-dev. Então, inverta o proxy duas vezes:

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>
    
por 25.11.2013 / 15:57
2

Adicione a configuração do proxy reverso (foe app-dev.proxy ..):

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

Você precisa ativar os mod_headers antes:

a2enmod headers

O servidor interno 10.0.1.2 deve ter

ServerName app.proxy.domain
    
por 25.11.2013 / 16:26