ようやくIIS7.0+ARR(Application Request Routing)によるリバースプロクシの構成ができました。Webサーバの構成ってあまり表に出ない話、でもないとは思いますが若干情報量が少ないのと、確認が大変なので結構時間がかかってしまいました。

[確認方法]
最近のルータ全般的な仕様なのか、はたまた自分が悪いのか良くわかりませんが、ルータの内部ネットワークからその外部IPを指すホスト名をリクエストしてもなんか上手く要求が通らないのです。なので、スマートフォン(Skyfireなど)を駆使して望むページが表示されることを確認してと・・・。こゆときに2回線あると便利なのですけどね。テスト用にデフォルトゲートウェイを切り替えるだけなので。

とりあえず今回行った設定は以下の感じ。

routing_rule 

今回Regzaへの割り当ては行っていません。というのもDDNSを行うサービス側のフリーサービスを超える範囲になるのと、電源つけっぱなしではないと録画のWebサービスが起動されないのですが、つけっぱなしにすると夜が五月蝿いんです。図で一点補足するなれば、今回IIS用のWebサーバが用意できなかったのでリバースプロクシサーバと振り分け後のIIS-Webサーバを共用しています。後、振分けの名前解決に内部DNSを使用していますが多分、通常の名前解決(WINSなど)ができれば問題ないと思います。

[1.ARR追加モジュールのインストール]
ルーティング用のサーバ(Reverse Proxyサーバ)を用意します。デフォルト(*:80)でサービスを展開して、Microsoft Application Request Routingよりダウンロードした追加モジュールをインストールします。

[2. ARRの有効化]
Proxy動作できるように「アプリケーション要求ルーティング処理」を有効にします。管理画面のアイコンでサイト管理にも似たような表示がありますが、IISコンピュータの管理画面から変更します(ちなみに、これでハマった)。
arr_1

アプリケーション要求ルーティングに「プロキシを有効にする」とあるのでそれにチェックをつけます。HTTPバージョンは多分気にしなくていいのですがHTTP/1.1を指定してます。その他、カスタムヘッダーとかにフォワーダーを指定すべきなのでしょうが、一旦パスで(ソーシャルアプリで見られるGadgetサーバ経由アクセスを行う場合は無視できないカモ)。
arr_2

[3. URL書き換え規則(ルーティングルール)の作成]
2.に同様、IISコンピュータの管理画面から「URL書き換え」、操作ペインから「規則の追加」を選択します。表示されたダイアログでは「空の規則」を選択します。

規則の編集では(サンプルで)以下のような設定を行います。
arr_3 

幾つかの注意を払うべき部分を挙げておきます。

  • URLの一致で今回はホスト名以下のロケーションを問わない(=ホスト名でのルーティング)なので、全てのパターンをマッチングさせています。括弧が付いているのは書き換えでディレクトリ以下が指摘できるように(.*)キャプチャをしています。
  • 条件が一番ポイントだと思います。{HTTP_HOST}でクライアントが要求してきたホスト名に対して、自分が振り分けたいホスト名を指定します。例えば外部アクセスのホスト名が「hogehoge.mydomain.hoge」であれば、それの正規表現形式である「(hogehoge¥.mydomain¥.hoge)」となります(一応、キャプチャ有り)。
  • アクションのURL書き換えでホスト名を書き換えます。ディレクトリ以下のパスをキャプチャした文字列{R:1}で追加してあげます。

このルーティングルールを2つ其々のホスト名に作ってあげればホスト名によるルーティングが可能となります。最後にマッチングしない要求(IPベースでの要求)をGoogle様にリダイレクションします。

  • ホスト名{HTTP_HOST}のマッチパターンをIPv4ベースのマッチパターン「(¥d+¥.¥d+¥.¥d+¥.¥d+)」を指定します。
  • URLの書き換えでGoogle様検索の「http://www.google.com/search?q={C:1}+{R:1}」を指定します。
  • アクションの種類を「リダイレクト」にします。(=書き換えのままだとARRの警告にあるように自身のRPが外部サーバをホストします)

[4. 動作確認]
後は外部からアクセスしてホスト名により振り分けられることを確認します。正しく動いていれば恐らく大丈夫です。

とりあえず以上でIIS7.0+ARRによるリバースプロクシの構成が完了です。一度動いてしまえば何となくカスタマイズできるかと思います。特定のフォルダ以下のリクエストに対して別サーバにリクエストしたり、特定の拡張子(jpg/gif/pngなど)のファイルを静的コンテンツ用のサーバにまわしたり。
まぁ、果たしてmod_rewriteだったりvhostだったりapacheと比べてどちらが高性能か、設定が楽か、はわかりませんが。

次なる課題はsymfony2とIISサーバの準備ですね。

最後に参考にした各種ページ