Apache で mod_perl を利用
mod_perl
Perlは、Web サーバーの CGI を作成するのによく使われます。しかし、http は毎回セッションが切れるれるため、CGI を何度も起動する場合に、インタプリタである perl の起動は動作上非常にネックになります(レスポンスが遅い)。そこで、mod_perl という apache に追加するモジュールを利用し、perlインタプリタを apache が抱えることで perl の起動を抑えレスポンスを上げることができます。
Apache に mod_perl モジュールを組み込む為に必要なもの
Apache オフィシャルページ http://www.apache.org/dist/apache_1.3.9.tar.gz
mod_perl モジュール http://www.perl.com/CPAN-local/modules/01modules.index.html
libwww-perl-5 モジュール http://www.perl.com/CPAN-local/modules/01modules.index.html
インストール方法
mod_perlのドキュメントに libwww-perl-5 を必要と記述されているので先にダウンロードしてインストールしておきます。スーパーユーザーで作業し、すでに perl がインストールされているものとします。
# gzip -dc libwww-perl-5.47.tar.gz | tar xf - # cd libwww-perl-5.47 # perl Makefile.PL # make # make test # make install
libwww-perl のドキュメントに、HTML-Parser, MIME-Base64, URI, Digest-MD5, libnet 等をインストールしてあると良いようなことが書いてあるのでインストールする。CPANモジュールなのでインストール方法やモジュールのありかは libwww-perl と同じです。
次に実際に mod_perl モジュールを作成し、apache を作り直します。
mod_perl と apache のソースを同じディレクトリーに展開し、それぞれコンフィグレーションを行いコンパイルします。
# gzip -dc apache_1.3.9.tar.gz | tar xf - # gzip -dc mod_perl-1.21.tar.gz | tar xf -
まず、mod_perl を作成します。APACI を使い(USE_APACI)、 module すべて組み込み(EVERYTHING=1)、Apache のソースの在り処を指定します。
# cd mod_perl-1.21 # perl Makefile.PL APACHE_SRC=../apache_1.3.9/src \ > DO_HTTPD=1 USE_APACI=1 PREP_HTTPD=1 EVERYTHING=1 # make # make test # make installこれで、mod_perl のモジュール等ができたので apache に組み込みます。
apache のコンフィグレーション時に、--activate-module=src/modules/perl/libperl.a を指定する。
# cd ../apache_1.3.9 # ./configure --activate-module=src/modules/perl/libperl.a # make # make install
設定ファイル httpd.confの編集
最も単純な設定方法は、特定の拡張子に対して mod_perl を使うよう設定することです。
<Files *.cgi> SetHandler perl-script PerlHandler Apache::Registry PerlSendHeader On </Files>
Perl スクリプトを記述する際の注意点
mod_perlを利用するには、変数の扱いに注意しなくてはなりません。従来の CGIスクリプトでは、CGIが呼ばれるたびにすべての変数が初期化れるため特に不具合は生じません。しかし、mod_perlを利用して起動されるスクリプトは任意数のリクエストを処理します。そのため、意図した以上のライフタイムを変数が持ってしまうことがあります。このことにより、スクリプトが自分の意図した通りに動いてくれないといった現象が生じます。これらを解消するために、以下のような始まりでスクリプトを記述するようにしてください。
#! /usr/bin/perl -w use strict;
この宣言により、明示的に宣言しなかったすべての変数を指摘してくれます。 指摘されたことにより、グローバル変数である必要があるかどうか、ローカル変数であるかなどを判断することができます。次に、必要ならブロックが終了後に変数が解放されるようにブロックの始まりに my() を利用してください。ただし、変数の利用状況をきちんと確認した上で my() を使用するようにしてください。-w オプションは Perl 5.004 以上のバージョンで利用ができます。
これらに関しての詳細については mod_perl の FAQ などを参照してください。