【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

第8回 バーチャルホストによる複数サイトの同時運用

一志 達也<ichishi@pochi.tis.co.jp>
TIS株式会社
2001/8/28

IPベースのバーチャルホスト

 前置きが長くなってしまったが、設定の解説に移ろう。バーチャルホストは、概念が複雑な割に設定そのものは単純である。ただし、バーチャルホストにはDNSの設定が不可欠である。複数のホストを賄うにしろ複数のドメインを担うにしろ、DNSの変更なしにアクセスを受け入れることなどできないからである。

DNSの設定

 まず、DNSの設定を済ませてしまおう。IPベースの場合は、ホストごとにIPアドレスを持つので特殊な設定は必要ない。ゾーンファイルに、

www    IN      A       172.16.1.11
linux  IN      A       172.16.1.12

という具合に、Aレコードを羅列していくだけである(ゾーンファイルの設定については、「BINDで作るDNSサーバ」第2回 名前解決の仕組みとゾーンファイルの設定を参照)。つまり、それぞれユニークなIPアドレスを持った複数のWebサーバが存在するものとして、各ホストを通常どおりに登録するだけである。

Apacheの設定

 Apacheの設定には、VirtualHostディレクティブを利用する。VirtualHostディレクティブは、

<VirtualHost IPアドレス>

</VirtualHost>

のように記述し、これが1ホスト分のブロックとなる。つまり、バーチャルホストでホスティングしたいホストの数だけ、このブロックを記述すればよい。IPベースで注意する点は、<VirtualHost IPアドレス>のIPアドレスを各ブロックで異なるものにしなければならないということである。Apacheは、このIPアドレスでホストの設定のブロックを識別するからである。

 <VirtualHost>と</VirtualHost>の間には、各ホストの設定に必要なディレクティブを列挙する。最低限、ホスト名を表すServerNameディレクティブとそのホストのコンテンツディレクトリを表すDocumentRootディレクティブを記述しなくてはならない。これ以外はオプション的な扱いとなるが、管理者のメールアドレスを表すServerAdminディレクティブやログファイルの位置を表すErrorLogTransferLogディレクティブくらいは記述しておくことをお勧めする。従って、VirtualHostディレクティブで囲まれたブロックの基本構造は、

<VirtualHost IPアドレス>
ServerName ホスト名
DocumentRoot コンテンツディレクトリ
ServerAdmin 管理者メールアドレス(省略するとデフォルト値)
ErrorLog エラーログファイル名(省略するとデフォルト値)
TransferLog アクセスログファイル名(省略するとデフォルト値)
</VirtualHost>

となる。

 以上の条件に従って、「www」と「linux」という2つのホストを定義したものが次の例である。このようなものをApacheの設定ファイルhttpd.confの最後に記述する。最後でなくても構わないが、httpd.confの最後にVirtualHostディレクティブの例が示されているため、これに準じて最後に記述するのが一般的だ。

<VirtualHost 192.168.1.11>
ServerName www.atmarkit.co.jp
DocumentRoot /www/httpd/www
ServerAdmin webmaster@www.atmarkit.co.jp
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>

<VirtualHost 192.168.1.12>
ServerName linux.atmarkit.co.jp
DocumentRoot /www/httpd/linux
ServerAdmin linuxmaster@www.atmarkit.co.jp
ErrorLog logs/linuxerror_log
TransferLog logs/linuxaccess_log
</VirtualHost>

 最後に、IPベースのバーチャルホストではBindAddressディレクティブにも注意してほしい。BindAddressディレクティブは、そのApacheがリクエストを受け付けるIPアドレスを定義する。例えば、

BindAddress 192.168.1.11

と書かれていたら、そのApacheは192.168.1.11にアクセスされた場合しか要求を受け付けなくなる。IPベースでは複数のIPアドレスを受け付けなければならないので、これではまずい。複数のIPアドレスでアクセスを受け付けたければ、

BindAddress 192.168.1.11 192.168.1.12

のようにIPアドレスを続けて書くか、

BindAddress 192.168.1.*

としてワイルドカードを使う。また、

BindAddress *

とすれば、そのサーバに割り当てられたすべてのIPアドレスへのアクセスを受け入れるようになる。

NAMEベースのバーチャルホスト

 こちらもIPベースと同様、DNS、Apacheの順で解説する。

DNSの設定

 IPベースの場合は、Aレコードで各ホストとIPアドレスの対応をDNSに登録していた。しかし、NAMEベースの場合はIPアドレスが1つしかないため、Aレコードで登録することはできない。NAMEベースでは、1ホスト分のみAレコードで登録し、残りのホストはCNAMEレコードで別名定義する。例えば、「www」と「linux」という2つのホストを172.16.1.11という1つのIPアドレスで運用するなら、

www        IN      A       172.16.1.11
linux      IN      CNAME   www

と記述する。まずAレコードでwwwというホストに172.16.1.11というIPアドレスを割り当てる。linuxというホストはCNAMEを使ってwwwの別名として登録する。こうすることで、172.16.1.11というIPアドレスにはwwwとlinuxという2つのホスト名が割り当てられたことになる。ホストを増やす場合は、同様に

ホスト名   IN      CNAME   www

という行を追加していけばよい。

Apacheの設定

 NAMEベースの場合、使うIPアドレスは1つだけなのでBindAddressディレクティブへの注意は必要ない。その代わり、NameVirtualHostディレクティブを使って複数のホスト名で共有するIPアドレスを示さなくてはならない

 以下の例は、192.168.1.11でwwwとlinuxの2つのホスト名を利用する場合の設定例だ。

NameVirtualHost 192.168.1.11

<VirtualHost 192.168.1.11>
ServerName www.atmarkit.co.jp
DocumentRoot /www/httpd/www
ServerAdmin webmaster@www.atmarkit.co.jp
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>

<VirtualHost 192.168.1.11>
ServerName linux.atmarkit.co.jp
DocumentRoot /www/httpd/linux
ServerAdmin linuxmaster@www.atmarkit.co.jp
ErrorLog logs/linuxerror_log
TransferLog logs/linuxaccess_log
</VirtualHost>

 NameVirtualHostの追加と、VirtualHostに記述するIPアドレスが共通であることを除けば、IPベースの設定とNAMEベースの設定に違いはない(編注2)。

編注2:ところで、NAMEベースのバーチャルホストを構築しているサイトに、IPアドレスでアクセスしたらどうなるだろうか? 答えは、「最初に記述されたブロックの設定が使われる」である。つまり、上記の例の場合はwwwというホストとして処理されるのである。バーチャルホストを構築する場合は、デフォルトとして機能するホストを最初に記述するようにしよう。

まとめと次回予告

 以上のように、バーチャルホストは概念が少々複雑だから方針の決定や設計には注意が必要だが、設定そのものは難しくない。

 次回は、Webのセキュリティについて紹介しようと思う。Webサーバで提供するコンテンツのセキュリティ管理には、十分に気を使わなくてはならない。ファイアウォールやセキュリティホールの管理、ウイルスへの対応策ばかりに注目が集まるが、だれもがアクセスできるWebサーバのコンテンツにも注意が必要なのである。

2/2

Index
ApacheによるWebサーバ構築
  バーチャルホストとは
 なぜバーチャルホストが必要なのか
  バーチャルホストを実現する2つの方式
 IPベース
 NAMEベース
IPベースのバーチャルホスト
 DNSの設定
 Apacheの設定
  NAMEベースのバーチャルホスト
 DNSの設定
 Apacheの設定
  まとめと次回予告

連載 ApacheによるWebサーバ構築


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています