Apahce2.(0|2) + fastcgi + catalyst
予定では今日明日は OFF のつもりだったんだが、作業が長引き今日は仕事。
Catalyst で組んでいる CMS が cgi で動かすと遅いので、さてどうしようかと。
mod_perl はデプロイ先がたくさんの VirtualHost が動いている関係で Pass。
Lighty 使うのも同様の理由で Pass。
さらに、mod_proxy 経由で Lighty や mod_perl 噛ませた Apache 別立てするプランもテストの時間が無いので今回は Pass。
となると、事実上、fastcgi 程度しか選択肢がない*1。
ところが Web 上にあまり情報が無く、なんやかやで少々てこずったので備忘録*2。
- FastCGI のインストール
まず、$ locate special.mk とかして、special.mk の有無を確認しておく。なければ # yum install httpd-devel。
http://fastcgi.com/ より source を落とし、./configure && make && make install で OK。 - mod_fcgid のインストール
mod_fcgid の source を落とし、Makefile を修正する。
top_dir = /usr/lib/httpd - /etc/ld.so.conf の修正
/usr/local/lib を追加し、# ldconfig - # perl -MCPAN -e 'install FCGI;install CGI::Fast' とかしておく
- httpd.conf の修正
下記参照
# cat /etc/httpd/conf.d/fcgid.conf LoadModule fcgid_module modules/mod_fcgid.so <IfModule mod_fcgid.c> SocketPath /tmp/fcgid_sock/ AddHandler fcgid-script .fcgi </IfModule>
httpd.conf はこう。
Virtual Host ディレクティブに書いた。必要な部分のみ抜粋。
Alias /static /PATH_TO_CATALYST_APPDIR/root/static <Location /static> SetHandler default-handler </Location> <Directory "/PATH_TO_CATALYST_APPDIR/script"> Options +ExecCGI <Files APPS_fastcgi.pl> SetHandler fcgid-script </Files> </Directory> Alias /PUBLIC_DIR_URI/ /PATH_TO_CATALYST_APPDIR/script/APPS_fastcgi.pl/
/static は、Catalyst の static に Alias を張り、SetHandler で Default-handler を指定すると、fcgid を経由せずにダイレクトに Apache が応答する。つまり、その分のタイムラグが減少できる。
そして Catalyst の App/script/App_fastcgi.pl に対して公開したい URI を Alias 指定すれば OK。
ノーマル CGI より、体感で 400% くらい速度が向上した。
*1:memcached という選択肢は、オーバヘッドで食らってるようなのと、catalyst との相性が不明のためパス
*2:さらに調べたらあった。http://www.yanoryuichi.com/wiki/index.php?Perl-Catalyst