HTTP 応答ヘッダーの変更

Ruslan Yakushev

ドキュメントのこのセクションは、URL Rewrite Module Version 2.0 for IIS 7 に適用されます。

このチュートリアルでは、URL Rewrite Module v 2.0 を使用して HTTP 応答ヘッダーを設定する方法を説明します。

前提条件

このチュートリアルでは、次の前提条件が必要です:

  1. ASP.NET 役割サービスが有効になっている IIS 7.0 以降
  2. URL Rewrite Module 2.0 リリース候補がインストールされていること
  3. URL Rewrite v2 とアプリケーション要求ルーティング処理を使用したリバース プロキシのチュートリアルを完了していること

はじめに

URL Rewrite Module 2.0 では、応答 HTTP ヘッダーのルールベースの書き換えがサポートされています。 応答ヘッダーを設定するための非常に一般的な使用シナリオは、ロード バランサーまたはリバース プロキシの背後にあるアプリケーションによって生成されるリダイレクト応答を変更することです。 たとえば、リバース プロキシの背後にあるアプリケーションがリダイレクト応答を返すときに、応答の HTTP Location ヘッダーは、インターネットに接続するアドレスではなく、内部アプリケーション アドレスを表している可能性があります。 応答の Location ヘッダーは、リバース プロキシ サーバーで URL Rewrite Module 2.0 を使用して変更できます。 このシナリオを、次の図に示します。

クライアント、リバース プロキシ サーバー、および内部クライアント サーバー間のリダイレクト応答プロセスを示す図。

  1. HTTP クライアントが Web ページ http://www.contoso.com/webmail/oldpage.aspx に要求を行います。
  2. リバース プロキシ サーバーが、URL Rewrite 2.0 とアプリケーション要求ルーティング処理を使用して、要求された URL パス内のフォルダーの名前に基づいて内部コンテンツ サーバーに要求を転送します。 例: http://webmail/oldpage.aspx
  3. コンテンツ サーバー上で実行されている Web アプリケーションが、HTTP クライアントを http://webmail/newpage.aspx にリダイレクトする応答 (HTTP/1.1 301) を発行します。
  4. リバース プロキシ サーバーが URL Rewrite 2.0 を使用して、応答内の内部ベースのリダイレクトの場所をインターネット ベースのリダイレクトの場所 (http://www.contoso.com/webmail/newpage.aspx) に置き換えます。

チュートリアル シナリオの設定

チュートリアル シナリオを設定するには、URL Rewrite v2 とアプリケーション要求ルーティング処理を使用したリバース プロキシに関するチュートリアルを完了します。 このチュートリアルを終えると、 2 つのコンテンツ アプリケーション (webmail と payroll) に要求をルーティングするリバース プロキシ Web サイトが作成されます。

このチュートリアルでは、webmail アプリケーションにリダイレクト ロジックを追加する必要があります。 実際のシナリオでは、これは Web アプリケーション コードによって開始されるリダイレクトになる可能性がありますが、わかりやすくするために、このチュートリアルでは URL Rewrite Module でリダイレクト規則を使用します。

  1. 次のフォルダーに web.config という名前のファイルを作成します。

    %SystemDrive%\inetpub\webmail
    
  2. テキスト エディターでそのファイルを開き、次の XML コードをその中に貼り付けて、ファイルを保存します。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
      <rewrite>
        <rules>
         <rule name="Redirect" stopProcessing="true">
         <match url="^index\.aspx$" />
         <action type="Redirect" url="default.aspx" />
        </rule>
       </rules>
      </rewrite>
    </system.webServer>
    </configuration>
    

    これは、index.aspx に対するすべての要求を default.aspx にリダイレクトする規則です。

次に、Web ブラウザーを開き、http://localhost/webmail/index.aspx に要求を行います。 ブラウザーが http://localhost:8081/default.aspx にリダイレクトされたことに注目してください。これは基本的に webmail Web アプリケーションによって使用される内部 URL です。 次に、ブラウザーが適切な URL (http://localhost/webmail/default.aspx) にリダイレクトされるように、HTTP リダイレクト応答の HTTP Location ヘッダーを変更するように URL 書き換え規則を構成します。

ホスト ヘッダーを保持するように受信規則を変更する

HTTP Location ヘッダーを変更できるようにするには、HTTP ホスト ヘッダーの元の値を保持する必要があります。 送信書き換え規則では、応答を変更するときに保持された値が使用されます。 元の値を保持するには、一時サーバー変数 ORIGINAL_HOST にそれを格納します。

  1. メインの URL Rewrite の機能ビュー ページで、右側の [アクション] ペインで [サーバー変数の表示] を選びます。
    [操作] ウィンドウの [サーバー変数の管理] の [サーバー変数の表示] のスクリーンショット。
  2. [許可されるサーバー変数] ページで、[追加] を選び、HTTP ホスト ヘッダーの値を一時的に格納するために使用されるサーバー変数の名前を入力します。 例: ORIGINAL_HOST
    ORIGINAL アンダースコア HOST に設定されたサーバー変数名のスクリーンショット。
  3. [OK] を選んで変更を保存し、メインの URL Rewrite の機能ビュー ページに戻ります。 その後、"webmail へのリバース プロキシ" 受信規則を選び、[編集] を選びます。
  4. [受信規則の編集] ページで、[サーバー変数] グループ ボックスを展開し、[追加] を選び、[サーバー変数名] に「ORIGINAL_HOST」、[値] に「{HTTP_HOST}」を入力します。
    [サーバー変数の値の設定] が中かっこ H T P アンダースコア HOST 中かっこに設定されている [受信規則の編集] ページのスクリーンショット。

HTTP 応答ヘッダーを変更するためのアウトバウンド規則の作成

次に、リダイレクト応答の HTTP Location ヘッダーを書き換えて、アプリケーション フォルダーを URL パスに再度追加し、ホスト名を置き換えるアウトバウンド書き換え規則を作成します。

  1. メインの URL Rewrite の機能ビュー ページで、[規則の追加] を選び、[アウトバウンド規則] カテゴリの下の [空の規則] を選びます。
  2. [アウトバウンド規則の編集] ページで、規則に "Location ヘッダーの書き換え" という名前を付けます。
  3. [事前条件] ドロップダウン リストで、[<新しい事前条件の作成>] を選びます。
  4. [事前条件の追加] ダイアログで、事前条件に "IsRedirection" という名前を付けます。
  5. [追加] を選び、条件入力として「{RESPONSE_STATUS}」、パターンとして「3\d\d」を入力します。 この事前条件は、応答にリダイレクト状態コード (301、302、307 など) があるかどうかを確認するために使用されます。 事前条件ダイアログは次のようになります。
    入力として設定された中かっこ RESPONSE アンダースコア STATUS 中かっこと、パターンとして 3 つの円記号 d の円記号 d が設定されているスクリーンショット。
  6. [OK] を選んで [アウトバウンド規則の編集] ページに戻ります。
  7. [照合] グループ ボックスで、[照合スコープ] ドロップダウン リストを使用して [サーバー変数] を選びます。
  8. [変数名] に「RESPONSE_Location」を入力し、[パターン] に「^http://[^/]+/(.*)」を入力します。 これにより、応答 HTTP ヘッダー "Location" を操作し、その値を、URL パスを前方参照に格納する正規表現パターンと照合するように規則が構成されます。
  9. [条件] グループ ボックスを展開し、[追加] を選び、条件入力として 「{ORIGINAL_HOST}」を入力し、条件パターンとして 「.+」を入力します。 この条件は、一時サーバー変数 ORIGINAL_HOST が存在し、空でない値を持っているかどうかを確認します。
  10. もう一度 [追加] を選び、別の条件を追加します。 条件入力を {URL}、パターンを "^/(webmail|payroll)/.*" に設定します。 この正規表現は、/webmail または /payroll で始まる URL パスと一致させるために使用されます。 また、パターン内のかっこは、一致する URL 文字列の一部をキャプチャして、置換 URL を構築するときに再利用できるようにします。
  11. 最後に、[アクション] グループ ボックスで [書き換え] アクションを選び、値として「http://{ORIGINAL_HOST}/{C:1}/{R:1}」を入力します。 このアクションは、HTTP Location ヘッダーの値を、サーバー変数のホスト名、URL パス フォルダー プレフィックスを含む条件の前方参照、Location ヘッダーの現在の URL パスを含む規則の前方参照を使用して構築された文字列に置き換えます。

完全なページは次のようになります。

元の HOST と U R L が条件入力として設定されている [送信規則の編集] ウィンドウのスクリーンショット。

規則のテスト

規則が正しく動作することをテストするには、Web ブラウザーを開き、http://localhost/webmail/index.aspx に要求を行います。 ブラウザーが http://localhost/webmail/default.aspx にリダイレクトされます。

元の U R L が新しい U R L にリダイレクトされている Web ブラウザーのスクリーンショット。

まとめ

このチュートリアルでは:

  • URL Rewrite 2.0 のいくつかの新機能を使用して、完全に機能するリバース プロキシ シナリオを実装する方法を学習しました。
  • バックエンド コンテンツ サーバーに要求を転送し、一時サーバー変数を設定するように受信規則を構成しました。
  • 次に、バックエンド コンテンツ サーバーから、Web アプリケーションによって生成されたリダイレクト応答の HTTP Location ヘッダーを変更するアウトバウンド規則を定義しました。