* Apacheをmod_perl対応にする [#d09dde19]
#setlinebreak(on);
Apacheを mod_perl 対応にして動作、パフォーマンスの検証を行う。
(1) ダウンロード
http://perl.apache.org/download/index.html から mod_perl をダウンロードしておく。
(2) インストール
既にApacheが DSO (Dynamic Shared Object)対応で構築済みの場合は、mod_perl モジュールを生成するだけでOK
≪DSO対応済みか確認≫
#html(<table style="margin-left:20px;"><tr><td style="background:#000000;color:white;width:700px;">)
/path/to/httpd -l
・
・
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
#html(</td></tr></table>)
DSO対応済みのApacheなので(mod_so.c が表示されているので)早速インストールへ。
#html(<table style="margin-left:20px;"><tr><td style="background:#000000;color:white;width:700px;">)
$ tar zxfv mod_perl-2.0-current.tar.gz
$ cd mod_perl-2.0.4
$ /usr/bin/perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache2/bin/apxs EVERYTHING=1
$ make
$ su
Password: ********
# make install
#html(</td></tr></table>)
#html(<div style="margin-top:10px;margin-left:10px;">)
USE_APXS ... 1 を指定するとApache拡張ツール(apxs)を使って組み込む。
WITH_APXS ... apxs のPATH(通常はhttpdと同じディレクトリにいるハズ)
EVERYTHING ... 1 を指定すると全てのコンテンツハンドラを有効する。
#html(</div>)
(3) 設定ファイルの編集
#html(<table style="margin-left:20px;"><tr><td style="background:#000000;color:white;width:700px;">)
# モジュールをロードする設定
LoadModule perl_module modules/libperl.so
AddModule mod_perl.c
<IfModule mod_perl.c>
# PerlRun版のAlias設定
Alias /cgi-perl-run/ "/path/to/cgi-bin/"
<Location "/cgi-perl-run">
SetHandler perl-script
# PerlHandler Apache::PerlRun # 1.3系の場合
PerlHandler ModPerl::PerlRun
Options ExecCGI
Allow from all
PerlSendHeader On
</Location>
# Registry版のAlias設定
Alias /cgi-registry/ "/path/to/cgi-bin/"
<Location "/cgi-registry">
SetHandler perl-script
# PerlHandler Apache::Registry # 1.3系の場合
PerlHandler ModPerl::Registry
Options ExecCGI
Allow from all
PerlSendHeader On
</Location>
</IfModule>
#html(</td></tr></table>)
※URLの指定を変えるだけで、mod_perl版でも通常版でも動くように設定する。
#html(<div style="margin-top:10px;margin-left:10px;">)
Apache::PerlRun ... スクリプトおよびモジュールの Preload 機能を提供するがスクリプト自体はキャッシュされない。
起動されるスクリプトは毎回コンパイルされて実行されるので、
実行後にはそのスクリプトの名前空間の変数やサブルーチンはフラッシュされる。
(ただし、requireやuseされているモジュール内についてはフラッシュされない。)
Apache::Registry ... 実行コードをメモリ上にキャッシュすることによって高速化する。
変数のスコープ、初期化などを厳密に行う必要があるが、めっちゃ速くなるらしい。(シャアドコロではないらしい。。なんでも何百%とか。)
変数のスコープ、初期化などを厳密に行う必要があるが、めっちゃ速くなるらしい。(シャアどころではないらしい。。なんでも何百%とか。)
#html(</div>)
(4) インストール確認
確認用CGI : /path/to/cgi-bin/mod_perl.cgi
#html(<div style="border:1px solid #000000;background:white;padding:4px;margin-left:20px;">)
#!/usr/bin/perl
print "Content-Type: text/plain\n\n";
print "MOD_PERL : $ENV{"MOD_PERL"}\n";
print "PROCESS ID : " . $$ . "\n";
#html(</div>)
以下の3つのURLにアクセスして 「PerlRun版」「Registry版」の時だけ mod_perl のバージョンが表示されればOK。
プロセスIDが変わらない事も忘れずに確認。
「通常版」
http://example.com/cgi-bin/mod_perl.cgi
「PerlRun版」
http://example.com/cgi-perl-run/mod_perl.cgi
「Registry版」
http://example.com/cgi-registry/mod_perl.cgi
(5)動作確認
「mod_perlで動かすときの注意」は [[こちら>mod_perl時の注意点]] を参照。
(6) パフォーマンス検証
「mod_perlの効果を測定する」は [[こちら>mod_perlの効果を測定する]] を参照。