* 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: ********
&#35; 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;">)

&#35; モジュールをロードする設定
LoadModule perl_module modules/libperl.so
AddModule mod_perl.c

&lt;IfModule mod_perl.c&gt;

&#35; PerlRun版のAlias設定
Alias /cgi-perl-run/ "/path/to/cgi-bin/"
&lt;Location "/cgi-perl-run"&gt;
&nbsp;   SetHandler perl-script
&#35;    PerlHandler Apache::PerlRun  # 1.3系の場合
&nbsp;   PerlHandler ModPerl::PerlRun  
&nbsp;   Options ExecCGI
&nbsp;   Allow from all
&nbsp;   PerlSendHeader On
&lt;/Location&gt;
&nbsp;
&#35; Registry版のAlias設定
Alias /cgi-registry/ "/path/to/cgi-bin/"
&lt;Location "/cgi-registry"&gt;
&nbsp;   SetHandler perl-script
&#35;    PerlHandler Apache::Registry # 1.3系の場合
&nbsp;   PerlHandler ModPerl::Registry  
&nbsp;   Options ExecCGI
&nbsp;   Allow from all
&nbsp;   PerlSendHeader On
&lt;/Location&gt;
&nbsp;
&lt;/IfModule&gt;
#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&#58;//example.com/cgi-bin/mod_perl.cgi

  「PerlRun版」
    http&#58;//example.com/cgi-perl-run/mod_perl.cgi

  「Registry版」
    http&#58;//example.com/cgi-registry/mod_perl.cgi
 
 
(5)動作確認
 
 「mod_perlで動かすときの注意」は [[こちら>mod_perl時の注意点]] を参照。
 
 
(6) パフォーマンス検証
 
 「mod_perlの効果を測定する」は [[こちら>mod_perlの効果を測定する]] を参照。

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS