Hosting MT under FastCGI (Japanese)
From MovableType
Contents |
FastCGI で Movable Type を動作させる
利点と概要
Movable Typeは多数のファイルから構成される比較的大きなアプリケーションです。CGIを利用していると、アプリケーションは*毎回メモリにロードしなおされる*ことになり、また複数のリクエストやセッションをまたがってキャッシュを活用することもできません。
mod_perl や FastCGI を使うと、アプリケーションは1度メモリにロードされ、その後のリクエストで毎回パースや解釈をする必要がなくなります。これによってパフォーマンスが劇的に向上します。
また、アクセスの多いサイトをスパム攻撃から守る効果もあります。MTのアプリケーションが(たとえば10から20のエントリーに対してスパムコメントが同時に投稿されている場合など)同時にいくつも起動させられると、サーバーは簡単に過負荷になってしまいます。MTをメモリ上に保持しておけば、コメント投稿もスムーズに行われるので、サーバーにかかる負荷が抑えられます(消極的な対策ではありますが)……。
FastCGI がインストール済みかどうかを確認する方法
セキュリティ上の理由でこれを公開していないシステムも多数あります。また、FastCGI を検出できるかどうかは実装にも依存します。いずれにしても、以下の方法を試してみるのは無駄ではないと思います。
- ホストに問い合わせる**
もっとも確実な方法はホスティングプロバイダに問い合わせることです。多くのプロバイダがインストールされているApacheモジュールをヘルプやFAQなどのセクションで公開しています。
- 試行錯誤してみる**
以下の内容の.htaccessという名前のファイルを作成して、MTのディレクトリに配置してみます。
<IfModule fastcgi_module> FastCgiIpcDir /tmp/fcgi_ipc/ AddHandler fastcgi-script fcgi FastCGIConfig -autoUpdate -idle-timeout 120 -killInterval 3600 -maxClassProcesses 6 -maxProcesses 15 </IfModule>
<IfModule fcgid_module>
<IfModule fastcgi_module>
AddHandler fcgid-script fcg fcgi fpl
</IfModule>
IPCCommTimeout 60
SocketPath run/fcgidsock
</IfModule>
Note: <If*> はえてして冗長になりがちで、実際にはほぼ必要ないのですが、ここでは元のサンプルを活かしつつ、便宜上とりあえずこのように記述しておきました。
次に、何らかのCGIプログラムを含むファイルを、fcgi という拡張子で配置して、それが正しくロードされるかどうか見てみます。もしロードされれば、FastCGI はインストールされています。エラーが起きた場合はおそらくインストールされていません。
- 確認済みホスト***
FastCGI をサポートするホストの情報は MTHostingDeveloperInfo を参考にしてください。
Movable Type 3.34 を FastCGI で動作させる方法
バージョン3.34から、Movable Typeには !FastCGI のサポートが**統合**されています。これによって、特殊なファイル、具体的には`MT::Bootstrap`のファイルを別途Movable Typeにインストールしなくても済みます。以下のように若干の変更を加えるだけで、FastCGIでMovable Typeが動作するようになります。
Movable Typeを!FastCGIで動作させるには、Movable Typeに付属のPerlモジュールに加えて、FCGIモジュールも必要になる場合があります。インストールされていない場合はあわせてインストールしてください。
Movable Typeの設定(自動)
すべてのCGIファイルを !FastCGI 環境下で動作させるように設定することができます。この場合、Movable Typeに手を入れる必要はありません。Webサーバーに対して「`.cgi`」拡張子が付いたすべてのファイルを FastCGI のハンドラで動作させるように指定するだけです。Apacheの mod_fastcgi ではこれは次のように記述します。
#AddHandler cgi-script .cgi AddHandler fastcgi-script cgi
mod_fcgid では次のようになります。
AddHandler fcgid-script cgi
こうすれば、Movable Typeは FastCGI で動作するようになります。しかし、これだとすべてのCGIアプリケーションに影響してしまいます。場合によってはMovable Typeだけを手動で構成したい場合もあるでしょう。その場合は、以下の解説に進んでください。
Movable Typeの設定(手動)
FastCGI のインストール
まずWebサーバーに !FastCGI の実装をインストールします。ホスティングプロバイダによってはユーザーがインストールすることは許可されていないかもしれません。詳細はプロバイダにお問い合わせください。
CGIファイルをコピーする
以下のCGIファイルをコピーして、ファイルの拡張子を.cgiから.fcgiに変更します。以降は便宜上 fcgi としていますが、これは必ずしも fcgi である必要はありません。
- mt.cgiをmt.fcgiに
- mt-comments.cgiをmt-comments.fcgiに
- mt-tb.cgiをmt-tb.fcgiに
- mt-view.cgiをmt-view.fcgiに
- mt-search.cgiをmt-search.fcgiに
MTの構成ファイルを編集する
Movable Typeの構成ファイル(mt-config.cgi)を編集します。具体的には次の内容を追加します。
AdminScript mt.fcgi CommentScript mt-comments.fcgi TrackbackScript mt-tb.fcgi SearchScript mt-search.fcgi ViewScript mt-view.fcgi
Movable Type 3.2 の mt-config.cgi や 3.1 以前の mt.cfg を引き継いで利用している場合は、# でコメントアウトされている次のセクションを前の例にならって書き換えます。
# AdminScript mt.pl # CommentScript mt-comments.pl # TrackbackScript mt-tb.pl # SearchScript mt-search.pl # ViewScript mt-view.pl
また、LaunchBackgroundTasks を無効にする必要があります。
ほかの設定例
このようにファイルのリネームや Movable Type の構成ファイル ( mt-config.cgi ) の設定を必要とせず、さらにほかの CGI アプリケーションに影響を与えないで MT のみを FastCGI で動作させます。
mod_fcgid
<Directory /var/www/path-to-mt-home>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
<FilesMatch "^mt(?:-(?:comments|search|tb|view))?\.cgi$">
SetHandler fcgid-script
</FilesMatch>
</Directory>
IPCCommTimeout 60
SocketPath path-to-fcgidsock
mod_fastcgi
<Directory /var/www/cgi-bin/mt>
AllowOverride None
Options None
Order allow,deny
Allow from all
<FilesMatch "^mt(?:-(?:comments|search|tb|view))?\.cgi$">
SetHandler fastcgi-script
</FilesMatch>
</Directory>
FastCgiIpcDir /etc/httpd/fastcgi FastCgiConfig -autoUpdate -idle-timeout 120 -killInterval 3600 -maxClassProcesse FastCgiServer /var/www/cgi-bin/mt/mt.cgi FastCgiServer /var/www/cgi-bin/mt/mt-search.cgi FastCgiServer /var/www/cgi-bin/mt/mt-view.cgi FastCgiServer /var/www/cgi-bin/mt/mt-tb.cgi FastCgiServer /var/www/cgi-bin/mt/mt-comments.cgi