MT3.11-jaのmod_perl化パート2 メモ

今回はこれを試します。

より高速な処理を望む場合は、Movable Typeをmod_perlハンドラとして実行することを検討します。 その際は、メイン・アプリケーション用とフロントエンドのコメント用の2つのハンドラを設定する必要があります。

引用先の手順1, 2は済んでいるものと仮定します。
MTのインストールディレクトリは/var/www/html/mt31/です。

4. mt.cfg修正部分
まず

DataSource /path/to/db (Berkley DBの場合は設定のこと)
CGIPath http://my.server.com:8080/mt31/
StaticWebPath /mt-static/

の設定はすでに済んでいるものとします。

4. mt.cfg追加部分


AdminScript cms
CommentScript co
TrackbackScript tr
SearchScript se
XMLRPCScript xr


3は後回しにして4を先に解説します。この変数定義の部分は各々のスクリプトのファイル名を変更して、呼び出し名とします。セキュリティのことを少し配慮してわざと2文字の文字に変更しています。rebuildした後のHTMLソースではform actionの部分などが置き換わります。

AdminScript cms

はマニュアルでは設定されていませんが、設定します。なお、ここで設定した文字列がmt.cgiの代わりに呼び出す管理画面へのURIとなります。

そして上記で設定した変数が実際のmod_perlモジュールへと紐付けられるようにhttpd.confを設定します。最初の数行ではperl-statusを見れるように設定しています。

3. httpd.conf修正追加部分


#
# mod_perl status
#
<Location /perl-status>
SetHandler perl-script
PerlHandler Apache::Status
</Location>
#
# mod_perl Apache Handler version
#
<Perl>
use lib '/var/www/html/mt31/lib';
use lib '/var/www/html/mt31/extlib';
</Perl>
PerlModule MT::App::CMS
<Location /mt31/cms>
SetHandler perl-script
PerlHandler MT::App::CMS
PerlSetVar MTConfig /var/www/html/mt31/mt.cfg
</Location>
PerlModule MT::App::Comments
<Location /mt31/co>
SetHandler perl-script
PerlHandler MT::App::Comments
PerlSetVar MTConfig /var/www/html/mt31/mt.cfg
</Location>
PerlModule MT::App::Trackback
<Location /mt31/tr>
SetHandler perl-script
PerlHandler MT::App::Trackback
PerlSetVar MTConfig /var/www/html/mt31/mt.cfg
</Location>
PerlModule MT::App::Search
<Location /mt31/se>
SetHandler perl-script
PerlHandler MT::App::Search
PerlSetVar MTConfig /var/www/html/mt31/mt.cfg
</Location>
PerlModule Apache::XMLRPC::Lite
PerlModule MT::XMLRPCServer
<Location /mt31/xr>
SetHandler perl-script
PerlHandler Apache::XMLRPC::Lite
PerlSetVar dispatch_to "blogger, metaWeblog, mt"
PerlSetVar MTConfig /var/www/html/mt31/mt.cfg
</Location>

Locationディレクティブで指定されたURIに変数の文字列をセットし、PerlHandlerディレクティブで指定したperlモジュールへと紐づきました。

その他
lib/MT/App.pmの修正


#sub mt_uri { $_[0]->path . 'mt.cgi' }
sub mt_uri { $_[0]->path . MT::ConfigMgr->instance->AdminScript }

mt.cgiがハードコードされており、管理画面の左上のMTマークをクリックするとmt.cgiを参照してしまうので、mt.cfgで設定した変数 AdminScriptから引くように修正しています。

httpd.confの設定を有効化するためにapacheを再起動します。

# /usr/local/apache/bin/apachectl restart
または
# /usr/local/apache/bin/apachectl graceful

restartだと kill -HUPするため、現在張られているコネクションは強制的に切断して再起動します。
gracefulだと現在張られているコネクションが切れた後にプロセスを再起動してくれます。実運用をしている場合はこちらの方がユーザーにやさしいでしょう。

管理画面はmt.cgiではなく、以下のURLをアクセスします。
http://localhost:8080/mtdir/AdminScript

今回の例では以下となります。
http://localhost:8080/mt31/cms

これで動くようになりましたが、従来のcgiファイルもまだ動く状態です。セキュリティの観点から別のディレクトリに移動するか、消去しましょう。

mt.cgi
mt-comments.cgi
mt-search.cgi
mt-tb.cgi
mt-xmlrpc.cgi

セキュリティ

こちらで指摘されているように、HTMLソースを見ることでMTのインストールディレクトリは明白です。上記ではcmsを使っていますが、もっと想像しにくい文字列に変更すると良さそうです。

参考資料:

Apache拡張ガイド〈上〉サーバサイドプログラミング
リンカーン スタイン ダグ マクエイカーン Lincoln Stein Doug MacEachern 田辺 茂也 田和 勝

おすすめ平均 
最強のWeb(Apache)サイト開発者になるために必要
mod_perl 解説書

Amazonで詳しく見る
by G-Tools