WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Apacheでのバーチャルホストの設定

      2012/12/12

バーチャルホストとは?

バーチャルホストとは、1台のサーバーで複数のドメインのWebサイトを運営することを可能にする、apache(httpd)の機能のことである。
この機能を利用することで、ドメイン毎にサーバーやIPアドレスを用意する手間・コストが省ける。

バーチャルホスト機能の種類とメリット・デメリット

バーチャルホストの設定方法にはおおきく分けてNAMEベースとIPベースのふたつがある。
NAMEベースのバーチャルホストは、WebブラウザがWebサーバに対して送るホスト名を基にして応答するホストを決定する方式であるのに対し、IPベースのバーチャルホストは、IPアドレスでホストを区別する方式である。

NAMEベースのバーチャルホストは、IPアドレスがひとつしか用意できない場合に有効で、IPベースのバーチャルホストは、IPアドレスを複数用意することは可能だが、サーバを複数台用意するのが難しいという場合に有効だ。
また、NAMEベースのバーチャルホストには、アクセスしているサーバのホスト名をサーバに送り返す機能が実装されていない(HTTP 1.1 に対応していない)極めて古いブラウザでは閲覧できないというデメリットがある(ただ、今日ではこのことが問題となるケースは非常に少ない)。
IPベースのバーチャルホストにはサーバーにネットワークカードを増設してそれぞれIPアドレスを割り振る・ひとつのネットワークカードに複数のIPアドレスを割り当てる機能であるVIFを利用してIPアドレスの割り振りをするなど、多少複雑な設定を要する場合がある。

なお、前述したようにバーチャルホストを利用すると複数のWebサイトを1台のサーバーで運営することとなるので、サーバーにもそれなりの負荷がかかる。
また、サーバーがダウンすると複数のWebサイトすべてが閲覧できなくなるということになる。
バーチャルホストを利用する際はその点を留意し、設定する仮想ホストの数はサーバーのスペックと相談して決定する、大規模なサイトでは専用のサーバーを用意するなどの対策が必要である。

このページでは、自宅サーバー用途で用いられることが多いと思われるNAMEベースでの設定方法を解説する。

バーチャルホストの設定

バーチャルホストを設定するには、apache(httpd)の設定ファイルに以下のようなVirtualHostディレクティブを記述する。

1. 設定ファイルを開く
[root@centos ~]# vi /etc/httpd/conf/httpd.conf

2. ファイルの末尾に以下の内容を追加
NameVirtualHost *:80
※メインホストの情報。既にあるウェブサーバにバーチャルホストを追加する場合、 既存のウェブサーバに対しても"); ?>ブロックを作らなければならないため、作成。
") . "\n"; ?>
    ServerName linuxserver.jp
") . "\n"; ?>

※追加ホスト情報(例 : otherdomain.com)
") . "\n"; ?>
    ServerName otherdomain.com  ※追加するホストのドメイン(例 : otherdomain.com)
    DocumentRoot /var/www/html/otherdomain.com  ※追加するホストのドキュメントルート
") . "\n"; ?>

また、上記のように「/etc/httpd/conf/httpd.conf」に設定を書き加えるのではなく、バーチャルホスト設定用のファイルを別に用意してそこに設定を記載しておくと整理がしやすくなる。

apche(httpd)の設定ファイル「/etc/httpd/conf/httpd.conf」の中に以下のような記述があることに注目したい。

 #
 # Load config files from the config directory "/etc/httpd/conf.d".
 #
 Include conf.d/*.conf

これは、ディレクトリ「/etc/httpd/conf.d」の拡張子が「conf」であるファイルをすべて設定ファイルの一部として読み込むことを意味している。
このディレクトリに以下のようにバーチャルホスト設定用の設定ファイルを作成する。

1. 設定ファイルを開く
[root@centos ~]# vi /etc/httpd/conf.d/virtualhost.conf

2. ファイルの末尾に以下の内容を追加
NameVirtualHost *:80
※メインホストの情報。既にあるウェブサーバにバーチャルホストを追加する場合、 既存のウェブサーバに対しても"); ?>ブロックを作らなければならないため、作成。
") . "\n"; ?>
    ServerName linuxserver.jp
") . "\n"; ?>
※追加ホスト情報(例 : otherdomain.com)
") . "\n"; ?>
    ServerName otherdomain.com  ※追加するホストのドメイン(例 : otherdomain.com)
    DocumentRoot /var/www/html/otherdomain.com  ※追加するホストのドキュメントルート
"); ?>

 - WEBサーバ構築 , , , ,