Apache proxy_http reindirizza su ip e imposta il nome host


16

spero che voi ragazzi mi potete aiutare con un problema di proxy che ho.

Quello che ho già

Ho impostato un proxy inverso http apache, per inoltrare richieste da * .proxy.domain a * .intern.domain. L'apache è l'unico modo per raggiungere le mie applicazioni web interne da una rete esterna.

Esempio:

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

Tutto funziona alla grande, ma ho il seguente problema.

Problema
Desidero inoltrare le seguenti richieste:

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

Questo non è un problema, ma sfortunatamente il server app-dev esegue una copia esatta dell'applicazione web dei server app e questa applicazione web risponde solo al suo nome host (app.intern.domain)

Quindi quello che devo fare è proxy il seguente

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

Posso fare la seconda cosa aggiungendo "10.0.1.2 app.internal.domain" in / etc / hosts, ma ciò significa anche che app.proxy.domain arriverà sul server dev.

Sto cercando un'opzione per impostare la voce / etc / hosts solo all'interno del file di configurazione del vhost per app-dev.proxy.domain, in modo che ogni altra configurazione del vhost utilizzi solo DNS per app.intern.domain.

Pensieri...

C'è un modo per dire la configurazione di Apache a

ProxyPass / http://10.0.1.2/

ma inviare app.intern.domain come nome host?

Modificare l'applicazione web dev-server per ascoltare app-dev non è un'opzione, poiché si suppone che sia una copia esatta (non la mia decisione ...)

Grazie!

Risposte:


34

Forse potresti usare mod_headers insieme a mod_proxy. Non l'ho provato però.

Quindi per il tuo vhost app-dev potresti avere:

RequestHeader set Host "app.internal.domain"

e quindi aggiungere:

ProxyPreserveHost On

2
L'impostazione ProxypreserveHost ha funzionato perfettamente. Grazie!
Alcuni Linux Nerd il

3

Una brutta soluzione è usare (piuttosto: abusare) il file / etc / hosts per puntare app.internal.domain a localhost e quindi configurare Apache per ascoltare due porte aggiuntive, una per ogni app e sviluppatore di app. Quindi proxy inverso due volte:

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>

2

Aggiungi a reverse proxy's config (foe app-dev.proxy ..):

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

Devi prima abilitare mod_headers:

a2enmod headers

Il server interno 10.0.1.2 dovrebbe avere

ServerName app.proxy.domain
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.