20

IIS 7.5 サイトで URL 書き換えをセットアップしています: http://site1.com/

これは、2 番目のサイトへのリバース プロキシとして機能します: http://site2.com/

イベントの流れは次のとおり
です。 1. ブラウザはhttp://site1.com/somepath
で GET を実行します 。 2. site1 は URL 書き換えリバース プロキシであるため、これは site2 に渡されます。これを必要とする mod を実行したので、これはうまく機能し、ホストは正しく設定されています。
3. site2 は 301 ステータスで応答し、HTTP Location ヘッダーをhttp://site3.com/somenewpath
に設定します 4. site1 はブラウザーに 301 で応答しますが、Location ヘッダーのホストを site1 に置き換えます: http://site1 .com/somenewpath

ステップ 4 で実現したいことは、site1が HTTP Location ヘッダーでhttp://site3.com/somenewpathで応答し、このデータをそのまま通過させることです。これを解決するために適用できるアウトバウンド ルールが必要だと思いますが、まだ解決できていません。

4

3 に答える 3

39

Application Request Routingが関係している可能性はありますか? IIS -> Machine or Site -> Application Request Routing Cache -> Server Proxy Settings を見て、「Reverse rewrite host in response headers」チェックボックスをオフにします。これをマシン レベルで行うと、すべてのサイトで有効になります。特定のサイトで実行すると、そのサイトでのみ有効になり、ボックスの他のサイトは影響を受けません.

于 2014-05-12T03:57:29.057 に答える
8

上記のコメントで述べたように、リバース プロキシのデフォルトの動作は、応答をそのまま通過させることだと思います (アウトバウンドの書き換えルールが設定されていないと仮定します)。ただし、プロキシの背後にあるサーバーからの 301 応答を使用してシナリオを具体的にテストしていません。

特別なアウトバウンド ルールが実際に必要な場合、このコードはhttp://site3.com/somepathへのすべての 301 応答の HTTP ロケーション ヘッダーを変更します。

<outboundRules>
  <!-- This rule changes the domain in the HTTP location header for redirect responses -->
  <rule name="Change Location Header">
    <match serverVariable="RESPONSE_LOCATION" pattern="^http://[^/]+/(.*)" />
    <conditions>
      <add input="{RESPONSE_STATUS}" pattern="^301" />
    </conditions>
    <action type="Rewrite" value="http://www.site3.com/{R:1}" />
  </rule>
</outboundRules>

このルールは、 URL Rewrite Module 2.0 Configuration Referenceに掲載されているルールを少し変更したものです。

于 2014-05-09T19:20:51.737 に答える