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を見て判断してページを生成するのがラクなんじゃないかと思う。
このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/19
参考になりました。