* 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の効果を測定する]] を参照。