複数のウェブサイトをホストする

複数のウェブサイトをホストする

同じ 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 アドレス、ポート番号であれば何にも干渉することはありませんから、 ホスト名は指定しなくても大丈夫です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説