複数のウェブサイトをホストする
複数のウェブサイトをホストする
同じ IP アドレス同じポート番号で複数のサイトをホストするには、ホストヘッダーが必要
IIS ではひとつのサーバーで、例えば http://www.foo.com/ と http://www.bar.com/ という二つのウェブサイトを同時にホストすることが可能です。
ここでちょっと考えていただきたいのですが、どちらも同じサーバー、 同じ IP アドレス、同じポート番号 (通常 80 番) でホストしているわけです。 それならこのとき、次の HTTP リクエストがこのサーバーにやって来た時に、 それは www.foo.com と www.bar.com のどちらのサイトに対するものでしょうか?
GET /baz.html HTTP/1.1
正解は 「これだけでは分からない」 です。(細かく言うと 「このリクエストは不正である」 ですが、それは後述します)
同じ IP アドレスの同じポート番号でデータを待ち受けているわけですから、 情報がこれしかなければ、どちらのサイトへの要求か判別不能です。
従って、ひとつのサーバー上で複数のサイトを識別できるようにするために、 HTTP プロトコル 1.1 では、ホスト (Host) ヘッダ を必須としています。
ですから、上記のような HTTP リクエストはダメで、実際には次のようなリクエストになります。
GET /baz.html HTTP/1.1 Host: www.bar.com
こうなれば、このリクエストが www.foo.com に対するものなのか、 www.bar.com に対するものなのかは明らかですよね。もちろん、www.bar.com に対するものです。
このように、ひとつのサーバー上の特定の IP アドレス、TCP ポートにて複数のサイトをホストするためには、 Host ヘッダーを指定しなければなりません。
IIS での複数サイトの作り方
それでは IIS で複数のサイトをホストする設定をしてみましょう。
ここでは具体的に www.foo.com と www.bar.com をホストするための設定をしましょう。
IIS マネージャでは、ウェブサイトの単位をその名の通り サイト (Site) という単位で管理します。
そして、すでに同じサーバーの (全ての IP アドレスに対する) 80 番に他のサイトが設定されている場合、 下図のように Host name にホスト名を入力すれば OK です。
また、当然ながら全く異なる IP アドレス、ポート番号であれば何にも干渉することはありませんから、 ホスト名は指定しなくても大丈夫です。