VirtualHost
Nov.09 2003
一台のサーバーで複数の domain を使用し、あたかも独立した複数のサーバーが存在するように見える(VirtualHost)設定を行う。VirtualHost の設定には、domain ごとに IP address を設定する IP ベースとWebブラウザがWebサーバに対して送るホスト名を基にして応答するホストを決定する NAME ベースとがあるが、非固定IPで運営しているので NAME ベースで設定になる。
NAME ベースのバーチャルホストを使うには、そのホストへの リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも) を指定する必要がある。 これは NameVirtualHost ディレクティブで設定する。通常、NameVirtualHost で * の属性を使ってサーバの全ての IP アドレスを使う。
扱うホストそれぞれに対して <VirtualHost> ブロックを作成する。
既にあるウェブサーバにバーチャルホストを追加する場合、 既存のウェブサーバに対しても <VirtualHost> ブロックを作る必要がある。このバーチャルホストの ServerName と DocumentRoot は、グローバルな ServerName と DocumentRoot と同じものにする。また、このバーチャルホストを設定ファイルの中で先頭に置いて、デフォルトホストとして動作するようにする。
<VirtualHost> コンテナの中に他のディレクティブを書くことで、バーチャルホストの設定を細かく調整することができる。ほとんどのディレクティブはこれらのコンテナに設置することができて、変更点はそのバーチャルホストに対してのみ有効になる。
新たに yatagarasu.jp を取得したので、/home/httpd/yatagarasu をホームディレクトリとする設定を行う。
各ディレクティブの意味は次のとおり。
- DocumentRoot
- ドキュメントルートを指定する。バーチャルホスト毎に別々に指定できる。
- ServerAdmin
- 管理者のメールアドレスを記入する。
- ErrorLog
- エラーログのファイル名を指定する。バーチャルホスト毎に違うファイルを指定できる。
- TransferLog
- アクセスログのファイル名を指定する。バーチャルホスト毎に違うファイルを指定できる。
NameVirtualHost *
<VirtualHost *>
ServerName www.sleepingbird.net
DocumentRoot /home/httpd/html
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log
</VirtualHost>
<VirtualHost *>
ServerName www.yatagarasu.jp
ErrorDocuments 404 /404.html
DocumentRoot /home/httpd/yatagarasu
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/yatagarasu_error_log
TransferLog /var/log/httpd/yatagarasu_access_log
</VirtualHost>
# /etc/init.d/httpd restartなお、yatagarasu.jp の DNS 設定は次のようにした。
CNAME www www.sleepingbird.net. ← 最後はピリオドwww.yatagarasu.jp へのリクエストは www.sleepingbird.net に割り当てられた IP アドレスが返される。
アクセス解析の AWStats でアクセスのロギング漏れが見つかった。確認してみると Virtual Host の設定をした時点からのアクセスが反映されていない。生ログを覗くと記録項目が少ない。
原因は、<VirtualHost> コンテナの中のログファイルディレクティブ設定では記録項目がデフオルトになってしまうため。従って、このコンテナ中で改めて combined 指定を設定しなければならない。改訂版の VirtualHost コンテナは次のとおり。
NameVirtualHost *変更後、httpd の再起動を行う。
<VirtualHost *>
ServerName www.sleepingbird.net
DocumentRoot /home/httpd/html
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log combined
TransferLog /var/log/httpd/access_log
</VirtualHost>
<VirtualHost *>
ServerName www.yatagarasu.jp
DocumentRoot /home/httpd/yatagarasu
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/yatagarasu_error_log
CustomLog /var/log/httpd/access_log combined
TransferLog /var/log/httpd/yatagarasu_access_log
</VirtualHost>
VirtualHost のディレクトリでの cgi 等の設定は、/etc/httpd/conf/httpd.conf の ### Section 2: に以下のように行を追加して apache を再起動する。
(この例では、DocumentRoot 以下の全てのディレクトリで cgi 注意)
<Directory /home/httpd/html>
・
・
・
・
・
</Directory>
# virtual host "yatagarasu"
<Directory /home/httpd/yatagarasu>
Options Includes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
