2005年3月18日

apache 大量のバーチャルホストの動的な設定

 もっともメジャーなHTTPサーバである apache には、バーチャルホストと呼ばれる機能がある。IISにもあるので、まあ普通の機能なのだろう。

 これは1つのサーバ機で、あたかも複数のHTTPサーバが動いているように見せかける機能である。NAT+と並び、IPv6の存在意義を否定する機能でもある。

 比較的簡単にドメインを増やすことが出来るからといって、調子に乗って増やすと壁にぶち当たる。ログファイルを開けなくなるのだ。通常、1つのサイトはアクセスログとエラーログで2つのログファイルを開いている。普通のOSはファイルを同時に1024個しか開けないので512サイトが上限になってしまう。正面から対処すると、リコンパイルという大げさな話になってしまう。

 そこで、Dynamically configured mass virtual hosting を読むのだか、なぜか日本語訳が無い。リンクのタイトルまでは日本語になってるのに。

 要約すると

VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
って書いておくと、
http://任意のホスト名/任意のパス
にアクセスしたときに
/www/hosts/任意のホスト名/docs/任意のパス

のファイルが使われる。
それだけである。

 サイトを増やす際は、フォルダを増やして、DNSの設定をすれば終わり。httpd.conf をいじる必要が無い。apacheの再起動も不要だ。ログファイルも1個なので、ファイル数制限に引っかからない。ただし、どのサイトへのアクセスか分からなくなってしまうので

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

ってしておくと、ログの行の先頭にホスト名が来る。
アクセス解析ソフトを使っている場合は、ちょっと面倒なことになるかもしれないが、まあ何とかなるだろう。

 ただ、この %0 を使った設定と、スペシャルな設定をするための静的なサイトを混在させようと試みたが、できなかった。IPを複数使えば出来そうな気がするが、勿体無いので検証していない。

 それと、例えば商品カテゴリ別にドメインを作ろうとか、そうゆう用途であれば、バーチャルホストの機能を使わず、CGIとかでSERVER_NAMEを見て判断してページを生成するのがラクなんじゃないかと思う。

Posted by rukihena at 23:10:14
トラックバックURL

このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/19

コメント

参考になりました。

Posted by coolweb at 2008年9月16日 13:02