Application Request Routing を利用して IISでリバースプロキシを作成する

Application Request Routing を利用して IISでリバースプロキシを作成する手順を紹介します。

概要

Webサイトの希望が大きくなると、サーバー台数を複数にしたり、アプリケーションごとにWebサーバーを分けたいことがあります。 通常、1つのサイトは1つのIISのWebサーバーが管理するため、別のマシンに分割するにはドメインを変更するか、サブドメインを利用する方法があります。 しかし、ドメインを分けずに1つのサイト内でアプリケーションごとに処理するサーバーを変えたい場合があります。
この記事では、IISでApplication Request Routingを利用してリバースプロキシを作成し、特定のURLの処理を別のサーバーで処理する方法を紹介します。

構成

今回は動作確認のサンプルのため、シンプルな下図の構成で動作確認します。
リバースプロキシでURLを書き換えWebサーバーに処理を渡す動作になります。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像1

配信元のWebサーバーの準備

リバースプロキシの裏側に配置するコンテンツ配信元のWebサーバーを設定します。
IISをインストールし、インターネット インフォメーション サービス (IIS) マネージャーでサイトが動作していることを確認します。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像2

今回はデフォルトの位置(c:\inetpub\wwwroot)のwwwroot内にcheckフォルダを作成し、コンテンツを配置します。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像3

checkフォルダ内にindex.html を配置します。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像4

index.htmlのファイル内容は以下の通りです。
[||index.html]
<html>
  <head>
  </head>
  <body>
    <p>テストです。(Internal Server)</p>
  </body>
</html>
Application Request Routing を利用して IISでリバースプロキシを作成する:画像5

IPアドレス指定(http://(ホストのIPアドレス)/check/index.html)で直接コンテンツWebサーバーのindex.htmlを確認します。下図のページが表示され、Webサーバーが動作していることが確認できます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像6

リバースプロキシのWebサーバーの設定

続いてリバースプロキシのWebサーバーを設定します。IISをインストールし、Application Request Routing (ARR)をインストールします。ARRのインストールはこちらの記事を参照して下さい。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像7

サイトの作成

[インターネット インフォメーション サービス (IIS) マネージャー]を開きます。左側のツリービューでサーバーのノードの下にある[サイト]のノードを選択します。 既に"Default Web Site" がありますが、新しくサイトを作成し、指定したドメインでホストできるようにします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像8

[サイト]のノードを右クリックし、ポップアップメニューの[Web サイトの追加]の項目をクリックします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像9

[Web サイトの追加]ダイアログが表示されますので、サイトの設定を入力します。[ホスト名]のテキストボックスにこのサイトにアクセスされるホスト名(ドメイン名)を入力します。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像10

サイトが作成できました。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像11

ツリービューで作成したサイトのノードをクリックして選択します。下図の画面が表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像12

中央のエリアの[IIS]セクションにある[URL 書き換え]の項目をダブルクリックします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像13

[URL 書き換え]の設定画面が表示されます。右側の[操作]エリアの[規則の追加]をクリックします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像14

[規則の追加]ダイアログが表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像15

[受信規則と送信規則]のセクションの[リバース プロキシ]をクリックして選択します。選択後ダイアログ右下の[OK]ボタンをクリックします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像16

[リバース プロキシ規則の追加]ダイアログが表示されます。[OK]ボタンをクリックしてプロキシ機能を有効にします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像17

[リバース プロキシ規則の追加]ダイアログが表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像18

[受信規則]のセクションの[HTTP 要求が転送されるサーバー名またはIPアドレスを入力してください]のテキストボックスにIPアドレスを入力します。
[SSL オフロードを有効にする]チェックボックスはチェックします。設定後[OK]ボタンをクリックします。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像19

インターネット インフォメーション サービス(IIS) マネージャーに戻ると、URL書き換えの[要求された URL addressに適用される受信規則]の欄に作成した規則が追加されています。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像20

作成された受信規則をダブルクリックするか、選択して右側の[操作]エリアの[受信規則]セクションの[編集]リンクをクリックします。下図の受信規則の編集画面が表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像21

今回は以下のURLを書き換えます。
アクセスされるURL書き換え先のURL
http://xxx.ipentec.com/test/*http://192.168.nnn.mmm/check/*

[パターン]のテキストボックスに次の正規表現を入力します。(この正規表現では抜けがありますが、それについては後述します。)
test/(/*)
[アクションのプロパティ]セクションの[URLの書き換え]テキストボックスに書き換え先URLを入力します。今回は次のURLになります。({R:1}が何を指すかは後ほど説明します。)
http://192.168.nnn.mmm/check/{R:1}
Application Request Routing を利用して IISでリバースプロキシを作成する:画像22

設定ができたら[パターン]のテキストボックスの右側にある[テスト パターン]のボタンをクリックします。
下図の[テスト パターン]ダイアログが表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像23

[テスト対象データの入力]のテキストボックスに test/index.htmlと入力します。入力後[テスト]ボタンをクリックします。
テストの結果がダイアログの下部に表示されます。{R:0} {R:1} のパラメータの値が表示されており、この値がURL書き換えのパラメーターとして利用できます。
今回、書き換え先URLが http://192.168.nnn.mmm/check/{R:1} と設定されているため、 http://xxx.ipentec.com/test/index.htmlhttp://192.168.nnn.mmm/check/index.html に書き換えられる動作になります。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像24

動作確認

Webブラウザで http://xxx.ipentec.com/test/index.html にアクセスします。コンテンツのあるWebサーバーのURL http://192.168.nnn.mmm/check/index.html に書き換えられ、Webサーバーに作成したindex.htmlの内容が表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像25

Application Request Routing を利用して IISでリバースプロキシを作成できました。

正規表現のパターンの見直し

先のテストでは正規表現のパターンを test/(/*) と設定しましたが、このパターンではURLの途中にこのパターンが含まれていても書き換えの対象となってしまいます。
具体的には http://xxx.ipentec.com/abcde/test/index.html の場合でもホスト以下のパスに test/の文字列が含まれるため書き換えURLの対象となり、http://192.168.nnn.mmm/check/index.htmlが表示されます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像26

この動作を防ぐためには、test が先頭である条件を追加する必要があります。パターンを下記に書き換えます。
正規表現に ^ を追加することでtestが先頭にない場合はパターンにマッチしません。
^test/(/*)
Application Request Routing を利用して IISでリバースプロキシを作成する:画像27

パターンを変更した状態で、http://xxx.ipentec.com/abcde/test/index.html にアクセスすると404が返ります。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像28

http://xxx.ipentec.com/test/index.html のURLにアクセスした場合は書き換え処理が実行され、コンテンツサーバの /check/index.html のページが表示できます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像29

実際の利用

実際の利用では複数のWebサーバーを用意してアプリケーションごとに参照先のWebサーバーを変えることで、複数台のサーバーで処理を分担でき負荷分散できます。
また、アプリケーションによってはIISを利用できないものもあるため、1つのサイト内で種類の違うWebサーバー(Apache, Nginex, IIS, Node.js)を混在して利用することもできます。
Application Request Routing を利用して IISでリバースプロキシを作成する:画像30


AuthorPortraitAlt
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
Copyright © 1995–2025 iPentec all rights reserverd.