2005-08-28
_ tDiary on Lighttpd with FastCGI
なんとなくApache以外のWebサーバでtDiaryを動かしてみたい衝動にかられて,最近よくみるLighttpdを使ってみました.tDiaryを単純なCGIとして動かすだけであれば,最低限の設定をすることで難なく動かすことができました.この時点でApacheとLighttpdのベンチマークを比較してみると,
# Apache Requests per second: 1.15 [#/sec] (mean) # lighttpd Requests per second: 1.17 [#/sec] (mean)
という結果で,まぁそう大差のない結果となりました.これではあまり面白みがないので,FastCGIを使ってどのくらい高速化できるかを試してみました.aptでlibfcgi-rubyをインストールして,LighttpdのFastCGIのモジュールを有効にします.設定は以下のようにしてみました.
fastcgi.server = (
".fcgi" => ( "localhost" =>
(
"max-procs" => 10,
"socket" => "/tmp/tdiary.socket",
"bin-path" => "/var/www/html/index.fcgi"
)
),
)
呼び出すindex.fcgiは以下のようにしました.
#!/usr/bin/env ruby
$MY_DIR = File.dirname(__FILE__)
$LOAD_PATH.unshift $MY_DIR
Dir.chdir( File.dirname(__FILE__) )
require 'fcgi'
FCGI.each_cgi { |cgi|
begin
ENV.clear
ENV.update(cgi.env_table)
$CGI = cgi
def CGI::new; $CGI; end
load File.join($MY_DIR, 'index.rb')
ensure
class << CGI; remove_method :new; end
end
}
上記コードは,tDiaryをFastCGI化とLighttpdAndFastCGIを参考にしました.LighttpdAndFastCGIでも書かれていますが,
よくわかんないけど、lighttpdでFastCGIを実行すると、カレントディレクトリが '/' になる。
という影響からなのか,tdiary.confが読み込めないエラーが発生しました.これを解決するために,「Dir.chdir( File.dirname(__FILE__) )」を記述しています.このサーバではtDiaryを複数設置構成でインストールしてあるので,index.rbはシンボリックリンクになっています.で,これでベンチマークをとってみると…
# FastCGI Requests per second: 2.11 [#/sec] (mean)
数値上は早くなったみたい.体感ではいまいちよくわからないですが….ベンチマークはとっていませんが,PHPをFastCGIで実行した結果は体感でも早くなったような気がします(気のせいかもしれませんが…).もうちょっといろいろさわってみて,問題なさそうならApacheからLighttpdに移行してみようかと思います.