名前ベースのバーチャルホスト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として作成し、他の設定ファイルと同じ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>


◆ ssl.confの設定

バーチャルホストの SSL 関係の設定は、 http.conf と同じディレクトリに作成される ssl.conf で行います。前述のように、名前ベースのバーチャルホストでは、SSL は一つのバーチャルホストしか扱えませんので、当該サイトの設定をSSL化対応にしたがって行ってください。

以上で、各サイトにアクセスが可能となるので、Apache を再起動してアクセス確認しましょう。


Top Pageへ   サーバの構築へ戻る