Apache2.2の導入
Win32 Binary(MSI Installer)のダウンロード
mod_perlはApacheのバージョン2.2に対応していることが分かりましたから、対応するバージョンのApacheを探します。Win32 Binary(MSI Installer): apache_2.2.4-win32-x86-no_ssl.msi をDownload - The Apache HTTP Server Projectからダウンロードしてください。
Apache 2.2.4のインストール
連載第1回のApache2のインストールでは、デフォルトでインストールしましたが。今回は、Cドライブのルート直下にApacheをインストールします。具体的には、他のバージョンも試験的に併用する可能性もあるので、「C:\Apache2.2」のフォルダにインストールします。このフォルダ名は、前述のmod_perl.soのインストールと関係しますので、Apacheのインストーラで合わせるように設定してください。
httpd.confの設定
httpd.confは、Apacheの設定ファイルです。Apacheのインストールフォルダのconfフォルダにあります。Apacheに添付されているデフォルトのものとは異なる変更部分を、httpd.confの最初から現れる順序に従って説明します。TeraPadなどのテキストエディタで編集して保存してください。
Listen 8686
ここはそれほど重要ではありません。デフォルトは「Listen 8080」となっています。ポート番号を「8080」とする指定です。最近では、デスクトップで動作するHTTPサーバーが増えており、ポート番号が知らないうちに衝突する可能性もあるので、「8686」に変更しています。
# Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses (0.0.0.0) # #Listen 12.34.56.78:80 Listen 8686
mod_perl2 設定
この部分が、mod_perlモジュールを動作させるために直接関係する設定です。
- mod_perl.soをロードします。
- mod_perlモジュールで動作させるスクリプト(perl-script)の拡張子の設定をします。
- ModPerl::Registryモジュールの使用(一度起動されたスクリプトはメモリ上に常駐します。スクリプトが書き換えられた場合には再起動されます)。
- 「PerlSendHandler On」で「HTTP/1.0 200 OK」をCGI実行時に出力できるようにします。
- perl58.dllをロードします(パスを正確に設定してください)。
ModPerl::Registryモジュールの使用でCGIを最も高速化できますが、注意点として、スクリプトの変数の初期化を徹底して行う必要があります。単体のスクリプトで正常に動作するCGIスクリプトも再点検が必要です。変数を初期化しないと前に実行した変数値が残って、同一のCGIの後の実行に影響を与えるからです。
### mod_perl2 setup ###################### LoadModule perl_module modules/mod_perl.so <IfModule mod_perl.c> AddHandler perl-script .pl PerlHandler ModPerl::Registry PerlSendHeader On LoadFile "C:/Perl5.8/bin/perl58.dll" </IfModule> ##########################################
ドキュメントルートの設定
特に説明を要しませんが、ユーザーの環境に合わせて設定してください。Apache2.2の設定を使うなら変更は不要です。
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # #DocumentRoot "C:/Apache2.2/htdocs" DocumentRoot "C:/anhttpd/htdocs"
ドキュメントルートのセキュリティ等設定
デスクトップCGIは、家庭での使用などではセキュリティについてそれほど神経質になる必要はありませんが、セキュリティが必要な場合には、ローカルと指定したPCからのアクセスのみ許可するようにIPアドレスを設定します。
# # This should be changed to whatever you set DocumentRoot to. # #<Directory "C:/Apache2.2/htdocs"> <Directory "C:/anhttpd/htdocs"> #...... ### セキュリティに不安のある環境では必ず設定が必要 ### # # Controls who can get stuff from this server. # #Order allow,deny #Allow from all Deny from all Allow from 127.0.0.1 192.168.1.110 192.168.1.190 Order deny,allow ###################################################### </Directory>
CGIディレクトリの設定
これも特に説明を要しませんが、ユーザーの環境に合わせて設定してください。Apache2.2の設定を使うなら変更は不要です。
<IfModule alias_module>
#......
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
#ScriptAlias /cgi-bin/ "C:/Apache2.2/cgi-bin/"
ScriptAlias /cgi-bin/ "C:/anhttpd/cgi-bin/"
#......
</IfModule>
CGIディレクトリのセキュリティ等設定
ドキュメントルートの場合と同様にセキュリティの設定を行ってください。また、mod_perlを動作させるためには、「Options ExecCGI」の設定が必要です。
# # "C:/Apache2.2/cgi-bin" should be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # #<Directory "C:/Apache2.2/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all #</Directory> # ### セキュリティに不安のある環境では必ず設定が必要 ### <Directory "C:/anhttpd/cgi-bin"> AllowOverride None Options ExecCGI Deny from all Allow from 127.0.0.1 192.168.1.110 192.168.1.190 Order deny,allow </Directory> ######################################################
cgi-scriptの拡張子設定
mod_perlはPerlのみしか動作しません。その他のCGI、例えば、jperlを動作させたい場合には、拡張子.cgiで動作するように設定します。他のスクリプトでも拡張子を.cgiに設定すれば、mod_perlと併用できます。
<IfModule mime_module>
#......
#
### jperlなど、cgi-scriptを併用したい場合はコメントをはずす ###
AddHandler cgi-script .cgi
###############################################################
#......
</IfModule>
デスクトップCGIフレームワークの設定
デフォルトの文字コードの設定とデスクトップCGIフレームワーク関連の環境変数の設定です。
### Desktop CGI Framework Setup ###### AddDefaultCharset shift_jis #AddDefaultCharset EUC-JP #AddDefaultCharset UTF-8 PassEnv DOCROOT USERDIR CGIDIR CGIDIR2 ######################################
mod_perl環境におけるデスクトップCGIフレームワークの動作確認
以上で設定は完了です。
perl-scriptの添付
連載第7回で、表「デスクトップCGIフレームワークのCGI一覧」にまとめたスクリプトについて、変数の初期化を徹底し、拡張子を.plに変更したスクリプトを添付しますので、環境変数CGIDIRに設定しているcgi-binディレクトリ(例えば、/cgi-bin/codezine)にコピーしてください。
codezine.htmlの変更
codezine.htmlもmod_perl用にcodezine_mp.htmlとして作り直しましたので添付します。これをドキュメントルートにコピーして、連載第7回の場合と同様に起動してください。
実行結果
mod_perlにより高速化された動作状態がよく分かるのは、AjaxのAtomフィードリーダー(atom2msrdb_read_ajax3.pl)の場合です。単純なCGIの場合には、記事の内容を[next]や[prev]ボタンで切り替える時、「Loading...」というイタリック体の文字が表示されるのがよく見えましたが、mod_perl環境下では、瞬時に表示されるだけで、読み取れないぐらいになります。
まとめ
Apacheにmod_perlを導入すると、かなりのパフォーマンスの向上が認められます。デスクトップではパーソナルなCGI利用になるので、Webサーバーに比べ負荷は低いのですが、スムースにアプリケーションが動作することが必要です。mod_perlの導入によって多少複雑なものを作っても余裕がある環境を構築できたのではと思います。
次回は、デスクトップCGIフレームワークにRSSリーダーを導入し、Atomリーダーとあわせ、ユーザーインターフェイスを改良していく予定です。
