web-dev-qa-db-ja.com

IIS ARR-リバースプロキシのURL書き換え-HTTP_HOSTの送信方法

複数のバックエンドIISサーバーの前でリバースプロキシとしてAARを使用しようとしています。

  • IIS/AARを実行しているサーバーに割り当てられた1つのパブリックIPアドレス

  • 次に、ホスト名に応じていくつかのバックエンドサーバーの1つにリダイレクトするように、送信URL書き換えルールを設定します。

多少機能しますが、常にホスト名にマップされたサイトではなく、バックエンドサーバーのデフォルトサイトを返すため、ホスト名(HTTP_Host)がプロキシサーバーからバックエンドサーバーに渡されていないようです。

(ホストを編集してリバースプロキシをバイパスしていることを確認しました。バックエンドサーバーはホストヘッダーにバインドされた正しいサイトを返します)

これはルールの例です(192.168.0.99は内部サーバー、site.myco.comはホスト名です)

    <rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://192.168.1.99/{R:1}" />                   
            </rule>
        </rules>
    </rewrite>

そうサーバー変数を入れてみました

    <!-- Guessing server.myco.com is hard coded -->
    <serverVariables>
        <set name="HTTP_Host" value="server.myco.com" />
    </serverVariables>

    <!-- Guessing picked up dynamically from incoming request Host header -->
    <serverVariables>
        <set name="HTTP_Host" value="{HTTP_Host}" />
    </serverVariables>

しかし、悲しいかないつもデフォルトのバインディングを返します-何かアイデアはありますか?

27
Ryan

この投稿には答えがあります- IIS7 Application Request Routingでヘッダーを変更する

PreserveHostHeaderを有効にする必要があります-UIでそれを行う方法を見ることができませんが、これは機能します

これをコマンドラインから実行して、Machine/webroot/apphost構成を更新します

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
46
Ryan

私の推測では、URLを書き換えたときに、サーバー変数HTTP_Hostを変更することはできません。

URL書き換えが適用されるWebサイトのレベル:

inetmgr

次に、右側のタブのAdd...リンクをクリックして、HTTP_Host変数を追加します。

add HTTP_POST

2
cheesemacfly