UNIX的なアレ:gihyo.jp出張所

第10回 知っておきたいApacheの基礎知識 その6

この記事を読むのに必要な時間:およそ 2 分

これまでの説明ではDocumentRootやディレクトリへの権限設定など,Apacheの基本的な説明をしてきました。しかし,今までの設定方法では1つのDocumentRootしか設定することができません。そのため複数のドメインを使用してサービスをできない設定となっています。

しかしながら実際は1台のサーバ,1つのApacheで複数のドメイン,複数のドキュメントルートでの=サービスを行いたいケースは多くあるかと思います。今回は,そのような問題を解決することができるVirtualHostの説明をしていきたいと思います。

VirtualHostとは?

VirtualHostとは,複数のドメインをそれぞれのDocumentRootでサービスを行うことができるApacheの機能です。具体的に説明をしたいと思います。

たとえば,example.comとexample.netというドメインを複数運用していたとします。それぞれのドメインを別々のサーバで使用するのであれば設定は簡単です。しかし,アクセスが多くない場合はドメインごとにサーバを新規に構築するのはコストに見合わないケースが多いでしょう。

このようなとき,VirtualHostを使うことで1台のサーバーにインストールした1つのApacheを使って,複数ドメインでのサービスを行うことができるのです。

VirtualHostの種類

VirtualHostには大きく分けて3つの種類があります。

NameVirtual,IPVirtual,PortVirtualの3つです。それでは3つの特徴をみてみましょう。

NameVirtual

名前ベースでアクセスを振り分ける(ApacheはHostHeaderで判断)

想定されうる用途
SSLを使わない小規模なサービス(格安のレンタルサーバなど)。
メリット
IPアドレスの取得が不要
デメリット
運用が煩雑になる可能性がある
HTTPSでサービスを複数行うことができない

IP Virtual

IPアドレスでアクセスを振り分ける。

想定されうる用途
SSLを使用する大規模サイト(企業で使用する多くの場合)
メリット
Portを変更することがなく,HTTPSでサービスを複数運用することができる
デメリット
IPアドレスを取得する必要がある

Port Virtual

Port番号でアクセスを振り分ける

想定されうる用途
NAT後の内部ネットワークでの利用
メリット
IPアドレスの取得が不要
デメリット
WellKnownPort以外を使用するとき,ユーザ側で明示的にPortを指定する必要がある

それぞれメリット・デメリットがありますね。使うときによって最適な方法を選択するようにしてください。

hostsを書き換えて準備をする

それではApacheの設定に入る前に,確認用の環境を整備します。

アクセスをする側のPCのhostsというファイルを修正することで,名前解決をLocal内で行わせることができます。それぞれのOSでのhostsファイルの場所は以下です。確実にバックアップを取得してから行ってください。

・Windows 
\WINDOWS\system32 drivers\etc\hosts

・Linux.MacOS
/etc/hosts

それでは上記のファイルに下記の1行を追加しましょう。IPアドレスは,ApacheがインストールされているサーバのIPアドレスを記述してください。

192.168.0.2	www.example.com    ## IPアドレスはapacheがインストールされているサーバのIPアドレスを記述

なお,この操作は他のアプリケーションの動作にも影響するので慎重に操作してください。

NameVirtualを設定する

それではここからは実際に設定をしていきましょう。まずはNameVirtualからです。

Sampleで用意してあるhttpd.confの238行目~244行目までがNameVirtualの設定です。Sampleではコメントアウトしてあるので,外して使用しましょう。

NameVirtualHost *:80       # NameVirtualを使うという宣言
<VirtualHost *:80>                # VirtualHostの開始
    DocumentRoot /usr/local/apache2/vhosts/www.example.com/htdocs        # このVirtualHostでうけた場合のDocumentRoot
    ServerName www.example.com                                           # サービスを行うドメイン
    ErrorLog /usr/local/apache2/vhosts/www.example.com/logs/error_log    # エラーログ
    CustomLog /usr/local/apache2/vhosts/www.example.com/logs/access_log common # アクセスログ
</VirtualHost>                    # VirtualHostの終了

DocumentRootやLog用のディレクトリが作成されていないとapacheは起動しません。作成してからApacheを再起動しましょう。

 $ sudo mkdir -p /usr/local/apache2/vhosts/www.example.com/htdocs
 $ sudo mkdir -p /usr/local/apache2/vhosts/www.example.com/logs
 $ echo "www.example.com" | sudo tee /usr/local/apache2/vhosts/www.example.com/htdocs/index.html
 $ sudo /usr/local/apache2/bin/apachectl restart

ブラウザからアクセスしてみてください。www.example.comと表示されれば成功です。

[TIPS]HTTPのヘッダを見てみよう

アクセスできたのは理解できても,なんとなくしっくりこない方もいらっしゃるでしょう。そんなときは,HTTPのヘッダを確認してみると良いと思います。FirefoxのアドオンでLiveHTTPHeadersというものがありますので,これを使ってみましょう。LiveHTTPHeadersをインストールした状態でアクセスをすると図のように表示されます。

図 HTTPヘッダの確認

図 HTTPヘッダの確認

HTTPヘッダを見ることができます。この場合では,Host: www.example.comというヘッダが送られているのがわかると思います。Apacheはこの情報を見てリクエストを判断することができているのです。

より効率の良いサーバ構成へ

さて,今回はVirtualHostの中でも,とくにNameVirtualに焦点を絞って説明をしてきました。もし無駄にサーバを分けていたり,Apacheを分けているようなケースがあれば,ぜひVirtualHostを適用してみてください。

しかしながら,NameVirtualも万能ではありません。状況に応じて最適なVirtualHostの種類は異なってきます。

次回以降で,その他のVirtualHostの説明をしていく予定です。

著者プロフィール

和田修一(わだしゅういち)

株式会社ロケットスタートCTO。PHPやPerlを中心としたアプリケーション開発から,Linuxなどの技術を中心としたインフラ系の設計・構築を担当。個人Blogは「Unix的なアレ」。

コメント

コメントの記入