名前ベースのバーチャルホストWWWサーバの構築
バーチャルホストには、一つの IP アドレスで運用できる名前ベースのバーチャルホストと、IP アドレスがそれぞれのサイト分必要な IP
ベースのバーチャルホストがありますが、ここでは、コストがかからず、簡易に対応できる名前ベースのバーチャルホストについて、簡単に解説します。コンテンツとしては
Windows ベースですが、Linux でも何も違いがありませんので参考になると思います。
なお、SSL セキュアサーバではアクセス時に最初に SSL の認証シーケンスが走ります。しかし、その時点では Apache
はアクセスしてきたホスト名が分からないため、証明書の交換は先頭のバーチャルホストのデータを元に行われます。従って、名前ベースのバーチャルホストでは、SSL
は一つのバーチャルホストしか扱えません。
Apacheのバーチャルホストには分かりやすい
ドキュメントがありますので、是非一読されることを薦めます。
■Apacheの設定
Apacheのバーチャルホスト設定は、VirtualHost ディレクティブで行います。
名前ベースのバーチャルホストを導入すると、元々あったメインホストというものが事実上なくなり、VirtualHost
ディレクティブの先頭に定義されたバーチャルホストがメインホストになります。従って、元々あったメインホストの設定やメインにしたいホストのデータは、先頭のバーチャルホストとして定義する必要があります。
また、名前ベースのバーチャルホストの場合、conf
ファイルに設定されている名前とアクセスしてきた名前がミスマッチした場合は、先頭のバーチャルホストへのアクセスとして扱われますので、2番目以降のバーチャルホストのホスト名の扱いを注意しないと、意図しないサイトにアクセスしてしまう可能性があります。具体的には、www.example.com というホストを2番目のバーチャルホストに定義していると、
同じアドレスに変換される DNS に定義されている他のホスト名(
example.com や、mail.example.com等)にアクセスがあった場合は、www.example.com
以外は先頭のバーチャルホストにアクセスしてしまうので注意が必要です。対策は下記を参照ください。
◆ httpd.confの設定
httpd.conf でバーチャルホストの設定をしますが、httpd.conf が大きくなり扱いにくくなるので、vhost.conf として作成し
Include するようにしました。
- vhost.confのInclude
httd.conf に下記を1行追加して、バーチャルホストの設定を vhost.conf
からI nclude する。(実際の設定は、vhost.conf に記述)
Include conf/vhost.conf
続いて、下記内容をvhost.confとして作成し、他の設定ファイルと同じconfディレクトリ配下に設置します。サンプルを参考に、各サイト固有に定義する必要がある設定を追加します。前述のように、名前ベースのバーチャルホストを導入すると、元々あったメインホストというものが事実上なくなるので、元のサイトで設定していた設定は先頭のバーチャルホスト移す必要があります。但し、ほとんどのディレクティブがバーチャルホストで使用できますので、設置に困ることはないと思います。バーチャルホストで使用できるディレクティブかどうかは、ドキュメントのコンテキストを見ればわかります。
ここでは、www.aconus.com 用、www.example.com 用を設置するものとして説明します。但し、example.com
は自分のドメインであり、DNS検索した場合は同じアドレスに変換されるものとします。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin oyaji@mail.aconus.com DocumentRoot
"C:/Apache2/htdocs" ServerName www.aconus.com
<Directory "C:/Apache2/htdocs"> Options
FollowSymLinks Includes ExecCGI AllowOverride
None Order allow,deny Allow
from all </Directory>
UserDir
"C:/Apache2/htdocs/*/public_html/" <Directory
"C:/Apache2/htdocs/*/public_html/"> AllowOverride
FileInfo AuthConfig Limit Options MultiViews
SymLinksIfOwnerMatch ExecCGI IncludesNoExec <Limit
GET POST OPTIONS PROPFIND> Order
allow,deny Allow from all
</Limit> <LimitExcept GET POST OPTIONS
PROPFIND> Order deny,allow
Deny from all </LimitExcept>
</Directory>
ErrorLog logs/error.log
SetEnvIf Remote_Addr 192.168. homelog nolog SetEnvIf
Request_URI "~akirin" akirinlog nolog SetEnvIf Request_URI
"default.ida" wormlog nolog SetEnvIf Request_URI "root.exe"
wormlog nolog SetEnvIf Request_URI "cmd.exe" wormlog nolog
SetEnvIf Request_URI "Admin.dll" wormlog nolog
CustomLog logs/home.log common env=homelog CustomLog
logs/akirin.log combined env=akirinlog CustomLog
logs/worm_.og common env=wormlog CustomLog logs/access.log
combined env=!nolog </VirtualHost>
<VirtualHost
*:80> ServerAdmin oyaji@mail.aconus.com
DocumentRoot "D:/web" ServerName www.example.com
ServerAlias example.com *.example.com
<Directory
"D:/web"> Options FollowSymLinks Includes
ExecCGI AllowOverride None
Order allow,deny Allow from all
</Directory>
ErrorLog
logs/example.com-error.log SetEnvIf Remote_Addr 192.168.
homelog nolog SetEnvIf Request_URI "default.ida" wormlog
nolog SetEnvIf Request_URI "root.exe" wormlog nolog
SetEnvIf Request_URI "cmd.exe" wormlog nolog
SetEnvIf Request_URI "Admin.dll" wormlog nolog CustomLog
logs/example.com-home.log common env=homelog CustomLog
logs/example.com-worm.log common env=wormlog CustomLog
logs/example.com-access.log combined env=!nolog
</VirtualHost> |
- NameVirtualHost
まず、NameVirtualHost ディレクティブで Apache サーバへのアクセスを受け付ける
IP アドレス(必要に応じてポートも)を指定する。NIC
が1枚しかなくアドレスが1つの場合はアドレスを明示する必要はなく、通常は「*」を指定し全てのアドレスへのアクセスを受け付けるようにすれば問題ないはずです。但し、SSL
も使用する場合は、例のように「*:80」と使用するポートを明示しないと、SSL
の443番と識別できないと怒られてうまく動作しないので、必ずポートを指定すること。
注:Apache
はここで指定したIPアドレスへのアクセスを受け付けるわけではなく、Listen ディレクティブでの指定に従う。
- <VirtualHost>
<VirtualHost>ディレクティブでは、上記で指定した内容に併せて指定する。通常は、「*」で問題ない(SSL
使用時は、*:80 ) はずであるが、NameVirtualHost で指定した設定に合わせること。
- ServerAdmin
サーバ管理者のメールアドレスを指定する。
- DocumentRoot
各サイトのドキュメントルートを指定する。ここでは、www.aconus.com
は従来どおりとし、www.example.com は「D:/web」とした。各サイトの動作条件も追加設定する。
- ServerName
各サイトのサーバ名(アクセスしてくるホスト名)を指定します。名前ベースのバーチャルホストを使用する場合、ブラウザへ入力されたアドレスとサーバ側に設定された名前を比較するため、家庭内でのアクセスに支障がないようにするには、内向きDNSを建てるか、hostsファイルで設定しておかないと思うようにアクセスできなくなる。
- ServerAlias
名前ベースのバーチャルホストを使用する場合、アクセスしてきたホスト名がミスマッチすると先頭のバーチャルホストへのアクセスとなる。従って、2番目以降のホストではミスマッチにならないよう、例のようにワイルドカードを使用するなどして、アクセスしてくる可能性のあるホスト名を列記しておくと良い。
逆にこの特性を利用すると、先頭にはミスマッチした時の専用のバーチャルホストを置き、2番目以降で期待しているホスト名でのアクセスのみを受け付けるように定義するという手もある。例えば、先頭のホストで、このホスト名でアクセスしてくださいと誘導すると言うのもありかな?
- その他
www.aconus.com では、UserDir
を使用しているのでその設定を今までのベースホストの設定から転記すると同時に、ログの分離収集のための設定も転記した。サイト毎に必要な設定を行えばよく、おやじの
HP の Apache 関係の設定や他のサイトの情報、マニュアルを参考にして設定する。
◆ ssl.confの設定
バーチャルホストの SSL 関係の設定は、 http.conf と同じディレクトリに作成される ssl.conf
で行います。前述のように、名前ベースのバーチャルホストでは、SSL は一つのバーチャルホストしか扱えませんので、当該サイトの設定を
SSL化対応にしたがって行ってください。
以上で、各サイトにアクセスが可能となるので、Apache を再起動してアクセス確認しましょう。
Top Pageへ サーバの構築へ戻る