前回の続きです。前回はWindows Azure ホステッドサービスでSSLを設定してみました。今回はSDK1.3のFull IISで利用できるようになったマルチサイト(複数の仮想サイト)で異なる証明書を持つサイトを実装してみたいと思います。
まず1つ目の基本となるWebサイト(=Webロールアプリケーション)は前回のものをそのまま流用します。
まずは追加でWebアプリケーションを追加しましょう。Windows Azureなソリューションにプロジェクトの追加でWebアプリケーションを選択します。(今回はせっかくだからASP.NET MVC3を使用します)
で、とりあえずクライアントからのリクエストされたホスト名を表示するようにIndex.chtmlを編集しておきます。
前回の手順を参考に、新しいサイト用の証明書も作成しておきます。(違うホスト名で)
ではサービス定義ファイルを弄って各Webアプリケーションに割り当てるInputEndpointを定義しようかと思ったら・・・
なんてこったい。ポートが重複してるから使えねーよ!ってエラーが!
…個人的にはもうこの時点で検証終了…なんですが、しょうがないのでポートを変えて進めようと思います(※もともと1つのWebロールでマルチサイトでホスト名もちがって(∩´∀`)∩ワーイっていう予定だったので…)
じゃぁ気を取り直して。
サービス定義ファイル(.csdef)にInputEndpoint要素を追加します。InputEndpointには待ち受けポート番号と、そのポートで利用する証明書を指定します。(証明書は先に追加しておいたCertificate要素のnameを指定します)
次に、元から記述されているSite要素内のBinding要素にHostHeader属性を追加し、このサイトで受け付けるホスト名を指定します。
同じようにSite要素を追加し、HostHeader要素を指定します。
最初のSite要素と違うのは、Site要素内のphysicalDirectory属性に追加する仮想サイトのルートフォルダを指定します。
ここで指定するフォルダはWindows Azureプロジェクトから見た相対パスでも、絶対パスでもOKです。また、このパスはプロジェクトを開いているローカルPCでのパスになります。
(ここで指定したパス以下が一緒にパッケージングされ、Windows Azure上に展開されます)
さてちょっとごちゃごちゃしましたがこんな感じで修正して実際にWindows Azure上へ配置してみます。
…配置を待つ間、今回指定したホスト名をHOSTSファイルに追記しときましょう。
まぁ、サンプルですしね。
そろそろ配置も終わってるころあいだと思うので、ブラウザで見てみましょう。
ちゃんとサービス定義ファイル(.csdef)で指定したとおりのホスト名と証明書が利用されてますね。証明書のエラーも出ていません。(※ポートがなぁ…)
ところでホストヘッダで指定されたURLとポートじゃないところへ接続するとどうなるんでしょう?今回はすべての仮想サイトにホストヘッダを指定しています。で、もともとの.cloudapp.netに接続すると…つながりません。
じゃぁホストヘッダに指定されているURLにつなぐけど、別の仮想サイトのポートにつなぐと…?
Service Unavailable(503)だそうで…証明書は指定したポートのものが表示されていますが、アクセスしてるホスト名が違うので証明書エラーもでています。
とまぁ概ね期待通りの動作ですね。ちゃんちゃん。
最後にWindows Azure内部でどうなっているか見ておきたいと思います。
まず証明書。
指定した証明書がローカルコンピューターにインストールされてますね。ちなみに証明書のインストールはサービスパッケージじゃなくて、管理ポータルに先にアップロードしていたものがWindows Azure側でOS展開時に一緒に配布されるようです。(このへんはMS安納さんが詳しいですね)
次にどうアプリケーションが展開されてるか、ですが。
Eの直下のApprootフォルダに展開されてます。
面白いのはApproot直下には最初に追加した(PhysicalDirectoryがないほう)しかファイルが無い様に見えるとこですかね。
実際にIISで設定されている_WASR_フォルダ以下の0、1フォルダにそれぞれのアプリケーションが展開されているので問題ないのですが、このへんは最初のパッケージングするとき次第なのであまり気にならないかな。
最後にIISの設定ですが、
先ほどの_WASR_フォルダ以下の0、1それぞれに仮想サイトが設定されています。またアプリケーションプールもそれぞれ独立してもっていることがわかります。
ちょっと面白いのがそれぞれの仮想サイトのバインディングを見ると、ホスト名が設定されていません。
これって、ホスト名による仮想サイトの振り分けをIISでやってないってことですよね?
つまり上位のロードバランサーでやってる??謎ですねー。
まとめ
というわけで長くなりましたがFull IIS+マルチサイトを見てみました。
同じような感じでサイト配下に仮想アプリケーションも指定できます。
Full IISになってだいぶWebロールの構成も柔軟にできるようになりましたが、微妙に手が届かない部分もまだありますね。まぁStartUp Tasksもあるので手動で構成することも可能と言えば可能ですが…
とりあえずこの機能についてはこれ以上ネタ思いつかないのでこれでおしまいー