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に移行してみようかと思います.