うまくいけば、皆さんは私が持っているプロキシの問題で私を助けることができます。
すでに持っているもの
* .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をリッスンすることはオプションではありません。これは正確なコピーであるはずなので(私の決定ではありません...)
ありがとう!
おそらくmod_headersをmod_proxyと組み合わせて使用できます。私はそれをテストしていません。
したがって、app-dev vhostの場合、次のようになります。
RequestHeader set Host "app.internal.domain"
次に追加します:
ProxyPreserveHost On
醜い回避策は、/ 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>
リバースプロキシの構成に追加(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