VirtualHost
やりたいこと
一つのhttp(Apache)サーバーで、複数のサイトを運営したい。
今回の例では、以下二つのドメインを受け付けます。
「
www.grot3.com」
「
www.vertual-grot3.com」
VirtualHostの設定
# vi httpd.conf
-- リクエストに対し、値にマッチするかチェックします。
-- その後、それぞれのVertualHostセクションを確認します。
-- サーバーのIPアドレスが192.168.1.1 でポートが80番の場合以下記述でOK。
NameVirtualHost 192.168.1.1:80
-- IPアドレスを特定する必要がなければ、以下でもOK。
NameVirtualHost *:80
-- VertualHostセクション
-- 必要な内容を記述します。
<VirtualHost *:80>
-- www.grot3.comを受け付けます
ServerName www.grot3.com
-- 以下、個別設定のディレクティブです
DocumentRoot /www/docs/www.grot3.com
LogLevel warn
ErrorLog logs/grot3.com-error_log
CustomLog logs/grot3.com-access_log common
ServerAdmin webmaster@grot3.com
</VirtualHost>
<VirtualHost *:80>
-- www.virtual-grot3.comを受け付けます
ServerName www.virtual-grot3.com
DocumentRoot /www/docs/www.virtual-grot3.com
ErrorLog logs/virtual-grot3.com-error_log
CustomLog logs/virtual-grot3.com-access_log common
ServerAdmin webmaster@grot3.com
</VirtualHost>
-- VirtualHostが正しく設定されているか確認する
# httpd -S
-- DocumentRootが未作成の場合、こんなメッセージが出ます。
Warning: DocumentRoot [/www/docs/www.virtual-grot3.com] does not exist
-- 記述に問題がないと、以下のようなメッセージがでます
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server www.grot3.com (/etc/httpd/conf/httpd.conf:1013) # どのVirtualHostにも一致しなかった場合(デフォルト)
port 80 namevhost www.grot3.com (/etc/httpd/conf/httpd.conf:1013) # 一つ目のVirtualHost
port 80 namevhost www.virtual-grot3.com (/etc/httpd/conf/httpd.conf:1022) # 二つ目のVirtualHost
Syntax OK
メモ:
アクセスにきたドメイン名が、設定したどのVirtualHostにも一致しなかった場合、
一番上に書いたVirtualHostセクションが使用されます。
予測不能なアクセスを防ぐため、
そのため、一番上にダミーですべてを拒否するVirtualHostを設定するのが良いでしょう。
その上で、せっかく来たアクセス(客)を逃したくないのであれば、403エラー用のファイルを作るなど、工夫してください。