- FastCGI とは?
- mod_fcgid
- Perl モジュールのインストール
- httpd-devel のインストール
- FastCGI ライブラリ( fcgi )のインストール
- mod_fcgid のインストール
- FastCGI の設定
- PowerCMS 設定方法(その1)
- PowerCMS 設定方法(その2)
- httpd サービスの再起動
- FastCGI の運用
FastCGI とは?
- PowerCMS ような CGI はユーザーからアクセスがあってから、Web サーバー経由で起動します。この起動時に設定ファイルの読み込みや、データベースとの接続、ファイルの読み込み、メモリの確保、モジュールの呼び出しなどおこない、 CGI の処理が終了するとこれらのプロセスは自動的に停止します。
- このため、PowerCMS などのサイズが大きな CGI で、コメントや多数ユーザーによる書き込み等、頻繁にアクセスがある場合は、この起動処理が毎回行われることでオーバーヘッドとなり CGI のレスポンスとシステム全体の処理が遅くなってしまいます。
- FastCGI は CGI として呼び出された際に Apache とは別プロセスとして起動し、処理が終了した後でも一定の期間処理を終了することなく、次の CGI へのアクセスを待ちます。アクセスがあった時に同じプロセスを使い回す事で、起動処理のオーバーヘッドが無くなり、レスポンスが上がります。
- FastCGI 自体はPerlだけでなく他の言語( Ruby や PHP など)にも対応しており、中〜大規模のサーバーで広く利用されています。
mod_fcgid
- Apache で利用出来る FastCGI モジュールは「 mod_fastcgi 」と「 mod_fcgid 」があります。一般に mod_fastcgi には長期間運用した場合に無応答や不安定になる事があると言われていました。その後 mod_fastcgi よりも安定し速い事を売りとした mod_fcgid が作られ、現在では Apache プロジェクト配下でメンテナンスされています。
- 今回は PowerCMS インストール済みの RedHat 系の Linux ディストリビューション(具体的には CentOS 5.4)に mod_fcgid をインストールする方法を紹介します。
Perl モジュールのインストール
- FCGI モジュールのインストールを cpan コマンドで行います
# cpan FCGI
- CGI::Fast モジュールのインストールを cpan コマンドで行います
# cpan CGI
CGI::Fast は CGI モジュールに含まれています。
httpd-devel のインストール
- httpd-devel のインストールを yum コマンドで行います
# yum install httpd-devel
FastCGI ライブラリ( fcgi )のインストール
- 以下のページからダウンロードを行います。
http://www.fastcgi.com/
- ダウンロード
# wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
- tarball の伸張
# tar zxvf fcgi-2.4.0.tar.gz -C /usr/local/src # cd /usr/local/src/fcgi-2.4.0
- configure の実行
# ./configure
- make, make install の実行
# make # make install
mod_fcgid のインストール
- 以下のページからダウンロードを行います。
http://httpd.apache.org/mod_fcgid/
- ダウンロード
# wget http://ftp.riken.jp/net/apache/httpd/mod_fcgid/mod_fcgid-2.3.5.tar.gz
- tarball の伸張
# tar zxvf mod_fcgid-2.3.5.tar.gz -C /usr/local/src/ # cd /usr/local/src/mod_fcgid-2.3.5/
- DSO としてインストールするために configure.apxs を実行します。
# ./configure.apxs
- make, make install の実行
# make # make install
FastCGI の設定
- 設定ファイルを新しく作成します。
# vi /etc/httpd/conf.d/fcgid.conf
- 設定ファイル(通常)
<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi SocketPath /tmp/fcgid_sock/ IPCConnectTimeout 20 MaxProcessCount 8 DefaultMaxClassProcessCount 2 TerminationScore 10 SpawnScore 80 IdleTimeout 300 MaxRequestLen 2097152 </IfModule>
mod_fcgid 2.3.6 以降では、MaxRequestLen を指定しない場合は、上限が 128 KB になります。
- 設定ファイル( make install で正しく設定出来なかった場合)
通常は make install 時に自動的に /etc/httpd/conf/httpd.confにmod_fcgid.so の情報が追記されますが、追記されない場合は下記のように明示的に LoadModule 行を指定してください。
LoadModule fcgid_module /usr/lib/httpd/modules/mod_fcgid.so <IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi SocketPath /tmp/fcgid_sock/ IPCConnectTimeout 20 MaxProcessCount 8 DefaultMaxClassProcessCount 2 TerminationScore 10 SpawnScore 80 IdleTimeout 300 MaxRequestLen 2097152 </IfModule>
mod_fcgid 2.3.6 以降では、MaxRequestLen を指定しない場合は、上限が 128 KB になります。
PowerCMS の設定方法(その1) (「その1」「その2」はどちらか片方を実行してください。)
設定を Apache 設定の変更だけで行う方法
Aacheのhttpd.conf を修正するだけで、PowerCMS 側の設定を一切必要としないという利点があります。
ファイル名の変更、mt-config.cgi の変更も必要がありません。
- 以下の設定を httpd.conf に追加して下さい。
<Directory "/var/www/cgi-bin/mt"> AllowOverride None Options ExecCGI Order allow,deny Allow from all <FilesMatch "^mt(?:-(?:comments|search|ftsearch|tb|cp))?\.cgi$"> SetHandler fcgid-script </FilesMatch> </Directory>
PowerCMS の設定方法(その2) (「その1」「その2」はどちらか片方を実行してください。)
設定を Power CMSディレクトリ内だけで行う方法
「 PowerCMS の設定方法(その1)」と違い、Apache の設定変更を必要しないという利点があります。
- FastCGI で PowerCMS を動かすため、拡張子を " cgi " から " fcgi " に変更します。
# cd /var/www/cgi-bin/mt/ # cp -a mt.cgi mt.fcgi # cp -a mt-comments.cgi mt-comments.fcgi # cp -a mt-tb.cgi mt-tb.fcgi # cp -a mt-search.cgi mt-search.fcgi # cp -a mt-ftsearch.cgi mt-ftsearch.fcgi # cp -a mt-cp.cgi mt-cp.fcgi (Community Solution を利用する場合)
- FastCGI で起動するように PowerCMS の設定ファイル「 mt-config.cgi 」を修正する必要があります。
# vi /var/www/cgi-bin/mt/mt-config.cgi
- mt-config.cgi の最後に追加してください。
AdminScript mt.fcgi CommentScript mt-comments.fcgi TrackbackScript mt-tb.fcgi SearchScript mt-search.fcgi (もしくは mt-ftsearch.fcgi) ViewScript mt-view.fcgi CommunityScript mt-cp.fcgi (Community Solution を利用する場合)
httpd サービスの再起動
- 設定の変更とモジュールの読み込みを行うため httpd をリスタートします。
# service httpd restart
FastCGI の運用
- 長期間 FastCGI を使って Apache の運用を行った場合、FastCGI 化された PowerCMS が不安定な挙動を起こしたり、無応答になる場合があります。この不具合は mod_fcgid で修正されているとされていますが、完全では無いとの報告も上がっています。
- このような状態になった場合は Apache を再起動して、定期的に FastCGI をリフレッシュさせる事で不具合のある FastCGI プロセスを終了させる事ができます。同様にダイナミックパブリッシングに利用されている PHP も不安定になる場合があるので、Apache の定期的な再起動は有用です。
- またプラグインをインストールした後など、PowerCMS のシステムに変更を行った場合、PowerCMS のディレクトリに入って以下のコマンドを実行し、mt.fcgi のタイムスタンプを更新します。これにより FastCGI 側のプロセスがシステムが更新された事を認識し Apache のリスタート無しに PowerCMS システム + FastCGI の更新ができます。
# cd /var/www/cgi-bin/mt/ # touch *.fcgi ./
※ URL およびファイル名は2010年3月23日現在のものとなります。最新版がある場合やダウンロードが出来ない場合は適宜読み替えて下さい。