Six Apart Developer Wiki

The Movable Type and Professional Network Wiki has been moved to wiki.movabletype.org.

Recent Changes

HostingMTUnderFastCGI_ja

[Login] Change #12 by OpenID Identitydrry at 2007-04-11 12:23:10.

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>

次に、何らかの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.cgimt.fcgi
  • mt-comments.cgimt-comments.fcgi
  • mt-tb.cgimt-tb.fcgi
  • mt-view.cgimt-view.fcgi
  • mt-search.cgimt-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
[Login] Change #12 by OpenID Identitydrry at 2007-04-11 12:23:10.
Six Apart
Makers of weblog software and services for individuals, organizations and businesses.