web-dev-qa-db-ja.com

Apache proxy_httpはipにリダイレクトし、ホスト名を設定します

うまくいけば、皆さんは私が持っているプロキシの問題で私を助けることができます。

すでに持っているもの

* .proxy.domainから* .intern.domainへのリクエストをプロキシするために、Apache httpリバースプロキシを設定しました。 Apacheは、外部ネットワークから内部Webアプリケーションにアクセスする唯一の方法です。

例:

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

これはすべてうまくいきますが、次の問題があります。

問題
次のリクエストをプロキシしたい:

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

これは問題ありませんが、残念ながらapp-devサーバーはアプリサーバーのWebアプリケーションの正確なコピーを実行し、このWebアプリケーションはそのホスト名(app.intern.domain)にのみ応答します

だから私がする必要があるのは次のプロキシです

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

/ etc/hostsに「10.0.1.2 app.internal.domain」を追加することで2番目のことを実行できますが、これはapp.proxy.domainがdev-serverに到達することも意味します。

/ etc/hostsエントリをapp-dev.proxy.domainのvhost構成ファイル内にのみ設定するオプションを探しています。これにより、他のすべてのvhost構成はapp.intern.domainにDNSを使用するだけです。

考え...

Apacheの設定を伝える方法はありますか?

ProxyPass / http://10.0.1.2/

しかしapp.intern.domainをホスト名として送信しますか?

Dev-servers webapplicationを編集してapp-devをリッスンすることはオプションではありません。これは正確なコピーであるはずなので(私の決定ではありません...)

ありがとう!

16
mohrphium

おそらくmod_headersをmod_proxyと組み合わせて使用​​できます。私はそれをテストしていません。

したがって、app-dev vhostの場合、次のようになります。

RequestHeader set Host "app.internal.domain"

次に追加します:

ProxyPreserveHost On
34
Piotr

醜い回避策は、/ etc/hostsを使用して(むしろ悪用)、app.internal.domainがlocalhostを指すようにしてから、アプリとapp-devのそれぞれに1つずつ、合計2つのポートをリッスンするようにApacheを設定することです。したがって、リバースプロキシを2回:

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>
3
HBruijn

リバースプロキシの構成に追加(foe app-dev.proxy ..):

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

事前にmod_headersを有効にする必要があります:

a2enmod headers

内部サーバー10.0.1.2には

ServerName app.proxy.domain
2
grafzero