4月 232010
 

今回は httpd の VirtualHost のお話です。

その昔、僕は日本で初めてバーチャネルホスティングのサービスを開始した会社にいて、当時の社長はアメリカから apache の VirtualHost の文化(この場合”技術”と言うのか)を持ってきた。当初は SunOS 4.1.4(だったかな?)に apache をインストールして IP アドレスをたくさんつけてサービスをしていた。

当時の SunOS は バーチャルホストを実現するために libc を置き換える必要があった(libc.so.2 だったかな?から libc.so.101 とか言うとんでも無いバージョンがついたものができ上がる;-)んだけど、再構築に失敗すると SunOS が起動しなくなったのよ。再インストール。今とは考えられない;-)。

で、最近はめっきりそのような環境(サーバ運用)とは関係のない仕事をしているので「昔取ったなんとか」みたいな感じで、当時の設定(と、その後、ちと学習した情報)の記憶のみで自宅のサーバを運用していたのでありました・・。

はっきり言って、うちのウェブサーバは応答が遅いっ!! どうしてか? とか思い色々と調べるわけです。サーバのハードウェア自体は Athlon X2 4600+、メモリ 4GB なのでそんなに過負荷とは感じないし・・。

で、思ったのが apache の VirtualHost の設定。これがちょっと前までしていた設定。

<VirtualHost 192.168.1.1 [2001:200:161:1400::ffff:1]>
    DocumentRoot /pathto/motsuyaki/
    ServerName   kinmiya.com
    ErrorLog     /pathto/log/error.log
    CustomLog    "| /pathto/rotatelogs /pathto/log/access-%Y%m%d.log 604800 540" combined
</VirtualHost>
<VirtualHost 192.168.1.1 [2001:200:161:1400::ffff:1]> DocumentRoot /pathto/motsuyaki/ ServerName www.kinmiya.com ErrorLog /pathto/log/error.log CustomLog "| /pathto/rotatelogs /pathto/log/access-%Y%m%d.log 604800 540" combined </VirtualHost>

 
以前は rotatelogs を利用していなかったのだけど、利用するようになったら応答速度ががた落ちしたような気がします。でもって motsuyaki.org の場合、ドメインがたくさんあるし、頭に www が付いていたり付いてなかったりするし、IPv4 と IPv6 の設定(以前は IPv4 と IPv6 でも VirtualHost を分けていた。上のような書き方が出来るとは知らなかった(^^;;)があるしでこのような設定をしていると結構応答速度が遅い感じがしてウンザリ・・。

各 VirtualHost の設定で rotatelogs が起動するんだけど、吐き出すログは一つにしているので、実は「良くログファイルがぶっ壊れないなぁ。」と関心していたのでありました(^^;;。

多分、遅いのはログ出力時のロックの問題で遅くなっているんだろう・・。みたいな・・。

で、見直した設定がこれ。これをドメインの数だけ記述します。ドメインはこの他に motsuyaki.org
もつ焼き.jp ホッピー.jp なので計四つか。今までは一個のドメインに付き四つの VirtualHost の設定を書いていたと言うことか・・。orz。

<VirtualHost 192.168.1.251 [2001:200:161:1400::ffff:1]>
    DocumentRoot /pathto/motsuyaki/
    ServerName   www.kinmiya.com
    ServerAlias  kinmiya.com
    ErrorLog     /pathto/log/error.log
    CustomLog    "| /pathto/rotatelogs /pathto/log/access-%Y%m%d.log 604800 540" combined
</VirtualHost>

 
ServerAlias を設定したので一個のドメイン名で www 有り/無し IPv4/IPv6 の全てでアクセスできる設定となりました。他にもドメインがたくさんあって、同一ログファイルに出力しているのですが、rotatelogs が頑張ってくれているみたいでログはつぶれないので多分大丈夫たろう。みたいな感じでいますf(^^;;。

rotatelogs のプロセス数は随分と少なくなりました。でもってアクセスすると、以前よりは早く表示してくれるようになったような気がします。

気がするだけで実際には細かいベンチマークテストとかしてないです。気分的な問題f(^^;;。

後、rotatelogs もいつかはソースコード読んでみたいものだと思っているのですが、複数のプロセスが起動して一個のログファイルに出力するのにどういう制御しているのだろう?とか。

本当はドメインごとにログファイルを分ければ良いとは思うのですが、ログ解析する時には一個にまとまっていてくれると嬉しいなぁ。みたいな・・。

ログの制御とか解析の辺りって、僕が apache の運用している時はあまり重要では無かったしねぇ。確か、SunOS には 200MB のカベがあって、それ以上はログが蓄積されなくなっていて、一週間に一度 httpd を再起動してログを手で名前かえて再起動。なんてしていたし・・。あ。けど、その後に rotatelogs が登場したかな?みたいな・・。

やはり一度 rotatelogs のソース、追ってみないとあかんかいのぉ。