SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

PerlでデスクトップCGI

デスクトップCGIフレームワークの研究 - mod_perlの導入

デスクトップCGIでWebとデスクトップを融合する 第8回

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」に変更しています。

httpd.conf - Listen 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の後の実行に影響を与えるからです。

httpd.conf - mod_perl2 設定
### 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の設定を使うなら変更は不要です。

httpd.conf - ドキュメントルート
# 
# 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アドレスを設定します。

httpd.conf - ドキュメントルートのセキュリティ等設定
# 
# 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の設定を使うなら変更は不要です。

httpd.conf - CGIディレクトリの設定
<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」の設定が必要です。

httpd.conf - CGIディレクトリのセキュリティ等設定
# 
# "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と併用できます。

httpd.conf - cgi-scriptの拡張子設定
<IfModule mime_module>
    #......
    # 
    ### jperlなど、cgi-scriptを併用したい場合はコメントをはずす ###
    AddHandler cgi-script .cgi
    ###############################################################
    #......
</IfModule>

デスクトップCGIフレームワークの設定

 デフォルトの文字コードの設定とデスクトップCGIフレームワーク関連の環境変数の設定です。

httpd.conf - デスクトップ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リーダーとあわせ、ユーザーインターフェイスを改良していく予定です。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
PerlでデスクトップCGI連載記事一覧

もっと読む

この記事の著者

jscripter(ジェイスクリプター)

NIFTY SERVEのFGALEL(エントリーラボ)、FGALTS(テキスト&スクリプト)に参画し、FGALTSでシスオペを務める。現在、TSNETメンバー。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1449 2007/07/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー