VirtualDocmentRoot
foo というディレクトリを作ると、そこを DocumentRoot とするバーチャルホスト foo.vh.notwork.org が作られるようにする方法をまとめておく。
前提
ワイルドカードなドメインを登録する
ゾーンファイルにたとえば、次のように定義してから 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 が返るようになるはず。