Apache proxy_http przekierowuje na ip i ustaw nazwę hosta

16

mam nadzieję, że pomożecie mi z problemem proxy, który mam.

Co już mam

Skonfigurowałem odwrotny serwer proxy Apache http do żądań proxy od * .proxy.domain do * .intern.domain. Apache to jedyny sposób na dotarcie do moich wewnętrznych aplikacji internetowych z sieci zewnętrznej.

Przykład:

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

Wszystko działa świetnie, ale mam następujący problem.

Problem
Chcę proxy następujących żądań:

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

Nie stanowi to problemu, ale niestety serwer app-dev uruchamia dokładną kopię aplikacji internetowej serwerów aplikacji, a ta aplikacja internetowa odpowiada tylko na nazwę hosta (app.intern.domain)

Więc muszę zrobić następujące polecenie proxy

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

Mogę zrobić drugą rzecz, dodając „10.0.1.2 app.internal.domain” w / etc / hosts, ale oznacza to również, że app.proxy.domain wyląduje na serwerze deweloperskim.

Szukam opcji, aby ustawić pozycję / etc / hosts tylko w pliku konfiguracyjnym vhost dla app-dev.proxy.domain, tak aby każda inna konfiguracja vhost użyła DNS dla app.intern.domain.

Myśli...

Czy istnieje sposób, aby powiedzieć konfiguracji apache, aby

ProxyPass / http://10.0.1.2/

ale wysłać app.intern.domain jako nazwę hosta?

Edycja aplikacji webowej dla serwerów dev do słuchania app-dev nie jest opcją, ponieważ ma to być dokładna kopia (nie moja decyzja ...)

Dzięki!

mohrphium
źródło

Odpowiedzi:

34

Możliwe, że możesz użyć mod_headers w połączeniu z mod_proxy. Nie przetestowałem tego jednak.

Więc dla twojego vhosta app-dev możesz mieć:

RequestHeader set Host "app.internal.domain"

a następnie dodajesz:

ProxyPreserveHost On
Piotr
źródło
2
Ustawienie ProxypreserveHost poradziło sobie doskonale. Dzięki!
Niektóre Linux Nerd
3

Brzydkie obejście polega na użyciu (raczej: nadużywaniu) / etc / hosts, aby wskazać app.internal.domain na localhost, a następnie skonfigurować Apache, aby nasłuchiwał dwóch dodatkowych portów, po jednym dla każdej aplikacji i aplikacji. Odwróć proxy dwa razy:

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
źródło
2

Dodaj do odwróconej konfiguracji proxy (foe app-dev.proxy ..):

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

Musisz wcześniej włączyć mod_headers:

a2enmod headers

Serwer wewnętrzny 10.0.1.2 powinien mieć

ServerName app.proxy.domain
grafzero
źródło