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的なアレ」。

コメント

コメントの記入