Apache proxy_http redirect ke ip dan set nama host

16

semoga kalian bisa membantu saya dengan masalah proxy yang saya miliki.

Apa yang sudah saya miliki

Saya telah menyiapkan proxy reverse http apache, untuk permintaan proxy dari * .proxy.domain ke * .intern.domain. Apache adalah satu-satunya cara untuk mencapai aplikasi web internal saya dari jaringan eksternal.

Contoh:

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

Ini semua bekerja dengan baik, tetapi saya memiliki masalah berikut.

Masalah
saya ingin mem-proxy permintaan berikut:

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

Ini bukan masalah, tapi sayangnya server app-dev menjalankan salinan yang tepat dari aplikasi web server aplikasi, dan aplikasi web ini hanya merespons nama hostnya (app.intern.domain)

Jadi yang perlu saya lakukan adalah proksi berikut ini

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

Saya dapat melakukan hal kedua, dengan menambahkan "10.0.1.2 app.internal.domain" di / etc / hosts, tetapi itu juga berarti app.proxy.domain akan mendarat di server-dev.

Saya mencari opsi, untuk mengatur entri / etc / hosts hanya di dalam file konfigurasi vhost untuk app-dev.proxy.domain, sehingga setiap konfigurasi vhost lainnya hanya akan menggunakan DNS untuk app.intern.domain.

Pikiran...

Apakah ada cara untuk memberitahu konfigurasi apache, ke

ProxyPass / http://10.0.1.2/

tetapi kirim app.intern.domain sebagai nama host?

Mengedit aplikasi web dev-server untuk mendengarkan app-dev bukanlah pilihan, karena ini seharusnya merupakan salinan yang tepat (bukan keputusan saya ...)

Terima kasih!

mohrphium
sumber

Jawaban:

34

Mungkin Anda bisa menggunakan mod_headers bersamaan dengan mod_proxy. Saya belum mengujinya.

Jadi untuk vhost app-dev Anda, Anda dapat memiliki:

RequestHeader set Host "app.internal.domain"

dan kemudian Anda akan menambahkan:

ProxyPreserveHost On
Piotr
sumber
2
Pengaturan ProxypreserveHost melakukan trik dengan sempurna. Terima kasih!
Beberapa Linux Nerd
3

Work-around yang jelek adalah dengan menggunakan (lebih tepatnya: penyalahgunaan) / etc / hosts untuk mengarahkan app.internal.domain ke localhost dan kemudian mengkonfigurasi Apache untuk mendengarkan dua port tambahan, satu untuk setiap aplikasi dan app-dev Anda. Jadi Balikkan proxy dua kali:

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
sumber
2

Tambahkan untuk membalikkan konfigurasi proxy (lawan app-dev.proxy ..):

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

Anda harus mengaktifkan mod_headers sebelumnya:

a2enmod headers

Seharusnya server internal 10.0.1.2

ServerName app.proxy.domain
grafzero
sumber