Apacheをmod_perl対応にする †
Apacheを mod_perl 対応にして動作、パフォーマンスの検証を行う。
(1) ダウンロード
http://perl.apache.org/download/index.html から mod_perl をダウンロードしておく。
(2) インストール
既にApacheが DSO (Dynamic Shared Object)対応で構築済みの場合は、mod_perl モジュールを生成するだけでOK
≪DSO対応済みか確認≫
/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
|
DSO対応済みのApacheなので(mod_so.c が表示されているので)早速インストールへ。
$ 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
|
USE_APXS ... 1 を指定するとApache拡張ツール(apxs)を使って組み込む。
WITH_APXS ... apxs のPATH(通常はhttpdと同じディレクトリにいるハズ)
EVERYTHING ... 1 を指定すると全てのコンテンツハンドラを有効する。
(3) 設定ファイルの編集
# モジュールをロードする設定
LoadModule perl_module modules/mod_perl.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>
|
※URLの指定を変えるだけで、mod_perl版でも通常版でも動くように設定する。
Apache::PerlRun ... スクリプトおよびモジュールの Preload 機能を提供するがスクリプト自体はキャッシュされない。
起動されるスクリプトは毎回コンパイルされて実行されるので、
実行後にはそのスクリプトの名前空間の変数やサブルーチンはフラッシュされる。
(ただし、requireやuseされているモジュール内についてはフラッシュされない。)
Apache::Registry ... 実行コードをメモリ上にキャッシュすることによって高速化する。
変数のスコープ、初期化などを厳密に行う必要があるが、めっちゃ速くなるらしい。(シャアどころではないらしい。。なんでも何百%とか。)
(4) インストール確認
確認用CGI : /path/to/cgi-bin/mod_perl.cgi
#!/usr/bin/perl
print "Content-Type: text/plain\n\n";
print "MOD_PERL : $ENV{"MOD_PERL"}\n";
print "PROCESS ID : " . $$ . "\n";
以下の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で動かすときの注意」は こちら を参照。
(6) パフォーマンス検証
「mod_perlの効果を測定する」は こちら を参照。