VirtualDocmentRoot

foo というディレクトリを作ると、そこを DocumentRoot とするバーチャルホスト foo.vh.notwork.org が作られるようにする方法をまとめておく。

前提

  • Apache 2.0.x
  • mod_vhost_alias を有効にしてある
  • *.vh.notwork.org の A を 192.168.5.132 にする
  • 192.168.5.132 は既存インターフェイスエイリアスで新規につくる
  • サイトデータは /var/www/vhosts 以下に置く

ワイルドカードドメインを登録する

ゾーンファイルにたとえば、次のように定義してから named に設定ファイルを読ませる。

*.vh.notwork.org.  IN      A       192.168.5.132

引けるかどうか調べる。

% host foo.vh.notwork.org
foo.vh.notwork.org has address 192.168.5.132
% host bar.vh.notwork.org
bar.vh.notwork.org has address 192.168.5.132

なければアドレスを追加

もし、これまで使っていなかったアドレスを使う場合は ifconfig で alias するなどして、このアドレスで bind(2) 出来るようにしておく。FreeBSD で rl0 に alias するにはこう:

% sudo ifconfig rl0 inet alias 192.168.5.132 netmask 255.255.255.255

ping(1) などできるかどうか調べておく。

httpd.conf を書く

すでに httpd が動いてることを前提として、追記する部分だけを抜粋する

Listen 192.168.5.132:80
NameVirtualHost 192.168.5.132:80

<VirtualHost 192.168.5.132:80>
    UseCanonicalName Off
    VirtualDocumentRoot /var/www/vhosts/%1

    ServerName vh.notwork.org
    ErrorLog "| /usr/local/sbin/cronolog /var/log/apache/vh.notwork.org/%Y%m/error.log"
    CustomLog "| /usr/local/sbin/cronolog /var/log/apache/vh.notwork.org/%Y%m/access-%Y%m%d.log" combined
    ServerAlias *.vh.notwork.org

    <Directory /var/www/vhosts>
    # 権限関係の設定をここに書く。Options とか AllowOverride とか。
    </Directory>
</VirtualHost>

cronolog は好みで使っているので、別に使わなくてもよいけれど、ログファイル自体は他と分けないと混乱する。

httpd を再起動する

再起動した後、/var/www/vhosts になにも置かれていなければ、http://foo.vh.notwork.org/ へのアクセスは 404 Not found になるはず。/var/www/vhosts/foo/index.html などを作ることで 200 Ok が返るようになるはず。