WindowsのIISで単一IPアドレスのサーバーに複数のWebサイトを設置・運用する(ホストヘッダー編)Tech TIPS

Webサーバ/IPアドレス/ポート番号を追加したりすることなく、Webサイトを増設したいことがある。それにはWebサイトごとにホスト・ヘッダ値を設定するという方法がある。WindowsのIISでも、ホスト・ヘッダ値を利用して複数のWebサイトを運用できる。

» 2009年08月14日 05時00分 公開
[島田広道デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象ソフトウェア:Windows 2000 Server/Windows Server 2003、IIS 5.0/IIS 6.0



解説

 新たにWebサイトを立ち上げたいが、コストなどの事情からWebサーバ・マシンは増やしたくないとき、既存のWebサーバ・マシンにそのWebサイトを追加することになるだろう。つまり単一のサーバ・マシンで複数のWebサイトを運用するということだ。この場合、どのように各Webサイトへのアクセス要求を正しく割り振るかが課題となる。

 単純なのは、Webサイトごとに異なるIPアドレスを割り当て、DNSサーバでも各Webサイトのドメイン名を各IPアドレスに名前解決させることで、各Webサイトへのアクセス要求を各IPアドレスに割り振ることだ。しかし、コストなどの事情からサーバ・マシンにIPアドレスを追加できないことも多い。

 Webサイトごとに異なるポート番号を割り当てるという方法もある。しかし、デフォルトの80番以外のポートを割り当てたWebサイトの場合、クライアント側では「http://www.example.jp:12345/index.html」のようにポート番号(ここでは12345番)をいちいちURLに加えなければならない。ユーザーに面倒を強いる点で、あまり好ましい方法とはいえない。

 そこでおすすめなのはホスト・ヘッダを利用する方法だ。ホスト・ヘッダとはクライアントからWebサーバへ送信されるHTTPリクエスト・パケットのヘッダに含まれる情報の1つで、通常はURL中のドメイン名が格納されている。例えばクライアントが「http://www.example.jp/index.html」というURLを開こうとした場合、ホスト・ヘッダには「www.example.jp」という値が格納される。つまり、各Webサイトに割り当てられたIPアドレスが同一であっても、ホスト・ヘッダを参照できれば、各Webサイトへのアクセス要求を識別できるということだ。

 Windows OS標準のInternet Information Services(IIS)にも、ホスト・ヘッダ値からWebサイトを識別する機能があり、単一IPアドレスでの複数Webサイトの運用が可能だ。本稿ではその設定方法と注意点について説明する。

 なお、Windows 2000 ProfessionalのIIS 5.0およびWindows XP ProfessionalのIIS 5.1には、Webサイトを1つしか運用できない制限があるため、そもそも複数のWebサイトは運用できない。しかし、ホスト・ヘッダ値そのものは、本稿で説明している手順で設定して利用できる。

操作方法

 本稿では、各Webサイトのドメイン名が、IISの稼働するWebサーバのIPアドレスに名前解決されるよう、あらかじめDNSサーバ(DNSゾーン)が設定されているものとする。

●ホスト・ヘッダ値の設定手順

 IISでホスト・ヘッダに関する設定を行うには、まず管理者アカウントで[管理ツール]の[インターネットインフォメーション サービス (IIS) マネージャ](IISマネージャ)を起動し、対象のWebサイトのプロパティを開く。なお、以下ではいずれもWindows Server 2003+IIS 6.0の画面を例に挙げているが、Windows 2000 Server+IIS 5.0でも操作方法はほとんど変わらない(設定項目名などが若干異なる程度の違いしかない)。

対象のWebサイトのプロパティを開く 対象のWebサイトのプロパティを開く
Webサイトにホスト・ヘッダ値を設定するには、まずIISマネージャでそのWebサイトのプロパティを開く。
  (1)対象のWebサイトを選んで右クリックする。
  (2)メニューが表示されたら、これを選ぶ→[A]

 プロパティ画面が表示されたら[Web サイト]タブを選んで、[詳細設定]ボタンをクリックする。

[A]

[Web サイト]タブからIPアドレス/ポート番号/ホスト・ヘッダ値の一覧画面を開く [Web サイト]タブからIPアドレス/ポート番号/ホスト・ヘッダ値の一覧画面を開く
Webサイトのホスト・ヘッダ値やIPアドレス、ポート番号については、この[Web サイト]タブで設定する。
  (1)これを選ぶ。
  (2)IPアドレスやポート番号の一部が表示され、ホスト・ヘッダ値は表示されない。IPアドレスやポート番号にしても、これが設定されているすべてとは限らず、詳細は[B]の画面で確認する必要がある。
  (3)これをクリックする。→[B]

 [Web サイト ID の詳細設定]画面が表示されたら、[この Web サイトの複数の ID]枠に注目する。ホスト・ヘッダ値はIPアドレスおよびポート番号と組み合わせて設定する必要があり、この枠には設定済みの組み合わせが一覧表示される。この組み合わせは1つのWebサイトにつき複数設定できる。新たにこの組み合わせを追加するには、[追加]ボタンをクリックする。

[B]

IPアドレスとポート番号、ホスト・ヘッダ値の一覧画面 IPアドレスとポート番号、ホスト・ヘッダ値の一覧画面
ホスト・ヘッダ値は、IPアドレスおよびポート番号と組み合わせて設定する。この組み合わせは複数、設定が可能なので、例えば1つのWebサイトに複数のホスト・ヘッダ値を設定すると、複数のドメイン名で参照できるようになる。
  (1)ここに、設定済みのIPアドレスとポート番号、ホスト・ヘッダ値の組み合わせが表示される。[IP アドレス]の「既定」とは、「(未使用の IP アドレスすべて)」を意味する。
  (2)ホスト・ヘッダ値を追加するには、これをクリックする。→[C]
  (3)既存のホスト・ヘッダ値を変更するには、(1)から設定済み項目を選んでから、これをクリックする。

 [Web サイトの識別の追加と編集]画面が表示されたら、ホスト・ヘッダ値とともにIPアドレスとポート番号を指定して、[OK]ボタンをクリックする。なお、ホスト・ヘッダ値には、ドメイン名に相当するIPアドレスも指定できる。例えば「192.168.1.101」と設定すると、「http://192.168.1.101/」のようにIPアドレスを直接指定したリクエストに応答するようになる。

[C]

ホスト・ヘッダ値を設定する ホスト・ヘッダ値を設定する
ホスト・ヘッダ値に対して、組み合わせるIPアドレスとポート番号を1対1で指定する。
  (1)このプルダウン・リストボックスから、割り当てたいIPアドレスを選択する。WebサーバのIPアドレスが1つだけの場合は、デフォルトの「(未使用の IP アドレスすべて)」を選べばよい。
  (2)ポート番号を記入する。特別なポート番号を利用していない限り、「80」を指定すればよい。
  (3)ホスト・ヘッダ値、すなわちURLにおけるドメイン名の部分を記入する。
  (4)設定が済んだら、これをクリックする。

 設定したら[OK]ボタンをクリックしていって各ダイアログを閉じていく。同じIISにある他のWebサイトについても同様に、ドメイン名に合わせたホスト・ヘッダ値を設定する。

●ホスト・ヘッダ値の設定と実際に応答するWebサイトの関係

 上記の手順で、次のように複数のWebサイトに対してホスト・ヘッダ値を割り当てたとする。なお、以下のホスト・ヘッダ値にあるドメイン名はいずれも同一のIPアドレス(192.168.1.101)に名前解決されるものとする。

サイト名 IPアドレスの設定 ポート番号 ホスト・ヘッダ値
Webサイト1 (未使用の IP アドレスすべて) 80 www.example.jp
Webサイト2 (未使用の IP アドレスすべて) 80 bbs.example.jp、
192.168.1.101
Webサイト3 (未使用の IP アドレスすべて) 80 www.example.co.jp、
example.co.jp
既定のWebサイト (未使用の IP アドレスすべて) 80 (なし)
複数のサイトに対するホスト・ヘッダ値の設定例
どのドメイン名も、Webサーバに割り当てられた同一のIPアドレス(192.168.1.101)に名前解決されるものとする。なお、「既定の Web サイト」とは、IISが標準で作成するWebサイトのことで、通常はホスト・ヘッダ値を指定せずに運用する(詳細は後述)。

ホスト・ヘッダ値を設定したWebサイトの一覧表示 ホスト・ヘッダ値を設定したWebサイトの一覧表示
これは上表の4つのWebサイトにホスト・ヘッダ値などを設定した後に、IISマネージャで左ペインのツリーから[Web サイト]を選んだところ。右ペインの[ホスト ヘッダー値]列に各Webサイトのホスト・ヘッダ値が表示されていることが分かる。ただし、1つのWebサイトに複数のホスト・ヘッダ値を設定した場合は一部しか表示されないので要注意。実際、Webサイト2やWebサイト3に設定したはずの「192.168.1.101」「example.co.jp」が欠落している。

 このとき、クライアントから指定されたURLに対して応答するWebサイトは次のようになる。

URL 応答するWebサイト
http://www.example.jp/…… Webサイト1
http://bbs.example.jp/…… Webサイト2
http://192.168.1.101/…… Webサイト2
http://example.jp/…… 既定のWebサイト
http://www.example.co.jp/…… Webサイト3
http://example.co.jp/…… Webサイト3
http://bbs.example.co.jp/…… 既定のWebサイト
クライアントから指定されたURLと、応答するWebアドレスとの対応
URLがいずれのWebサイトにも合致しない場合は、既定のWebサイトが応答する。また、IPアドレスを指定したURLに特定のWebサイトを応答させたい場合は、Webサイト2のようにホスト・ヘッダ値にIPアドレスを指定する必要がある。

 このように、URLで指定したドメイン部分にホスト・ヘッダ値が合致したWebサイトが応答する。いずれのWebサイトにも合致しない場合は、既定のWebサイトが応答する。 

●ホスト・ヘッダを利用する際の注意点

 特に注意が必要なのは、各WebサイトにおけるIPアドレス/ポート番号/ホスト・ヘッダ値の組み合わせは、同一のIIS内の全Webサイトを通してユニーク(一意)でなければならない、という点だ。もし複数のWebサイト間で組み合わせが重複するとエラーが発生し、設定したWebサイトが停止する。

複数のWebサイト間でIPアドレス/ポート番号/ホスト・ヘッダ値の組み合わせが重複したときのエラー 複数のWebサイト間でIPアドレス/ポート番号/ホスト・ヘッダ値の組み合わせが重複したときのエラー
これはIISマネージャにて、サイト「example site」と同じIPアドレス/ポート番号/ホスト・ヘッダ値の組み合わせをサイト「example site 2」にも設定した直後、F5キーを押して最新の状態を表示させたところ。
  (1)設定直後、example site 2は自動的に停止してしまった。これはIISが設定の重複を検出して自動的に当該サイトを停止したことによる。
  (2)ホスト・ヘッダ値、IPアドレス、ポート番号のいずれも、example site 2はexample siteのものと重複していることが分かる。
  (3)重複設定によるエラー・メッセージ。表面的な現象とメッセージの内容が食い違っているが、エラーが発生していることは分かる。

 もう1つの注意点は、どの組み合わせにも該当しないリクエストを受け付けるWebサイトを用意することだ。さもないと、こうしたリクエストに対してIISはデフォルトでHTTPエラー・コード400(不正な要求)をクライアントに返すだけで、ユーザーに不親切だ。通常はIISが標準で作成する「既定の Web サイト」、すなわちWebサイト識別子が「1」のサイトにこの役割を担わせる。従って、通常のWebサイトは既定のWebサイトではなく、新たに作成した仮想サイトに構築した方がよい。

 既定のWebサイトには、IPアドレスを「(未使用の IP アドレスすべて)」、ホスト・ヘッダ値を無指定、ポート番号は全Webサイトで使用しているものを1つずつ組み合わせて設定する。つまり、ポート番号が複数使用している場合は、この組み合わせも複数になる。80番ポートしか使っていない場合は、既定のWebサイトのデフォルト設定(「(未使用の IP アドレスすべて)」/80番ポート/ホスト・ヘッダ値なし)のままでよい。

 これにより、どのホスト・ヘッダ値にも該当しない、すなわち予期せぬドメイン名でアクセスされた場合、既定のサイトにリクエストが届くようになる。あとはエラー・ページを表示するなり、別のサイトにリダイレクトするなり、セキュリティ・ポリシーなどに従って既定のWebサイトを設定すればよい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。