« 無線LAN携帯電話にSkypeをプリインストール | Main | 暴走したそうです »

›2 13, 2005

Windows + apache + mod_perl

[ PC Tips ]

前置きはさておいて、ここ数日行ったapache導入のまとめです。環境はWinXP SP2のノートPCにapache1.39 + active perl 5.6 + mod_perl 1.3です。他にもPHPやmysqlなんかなら簡単に導入できそうな感じです。


1. Active Perlのインストール

 最初にPerlがWindows環境で動くように、Active Perlを導入します。Apacheの導入が先であるべきでは?という意見がありそうですが、多分関係ないです。Apache自体よりもインストールが簡単だからでしょう。
 
 私の場合はActiveState - ActivePerl free Perl open source binary language distribution - Dynamic Tools for Dynamic Languagesから5.6系をDLしてインストールしました。その際、インストールするパスをC:\usr\local\にしておくとperlを記述する際に一番上に書くperlへのパスがlinuxと同じになるのでオススメです。(デフォルトだと#!C:/perl/bin/perlとかにする必要が出てくる。)
 

2. Apacheのインストール

 Downloading Apache - Japanized Apache Site
ドコでも良いので、binaries→win32フォルダの中にある最新バージョンのMSI Installer PackageをDL。インストールしてしまう。途中でサーバー情報としてネットワークドメインとサーバーネームを訪われるのでlocalhostとでも入れておきましょう。んで、その画面でRun as a service for All Users -- RecommendedとRun when started manually, only for me (xxxxx)のどちらかを選択することになるのですが、Recommendedされている方を選ぶとサービスに組み込まれてWin起動時に毎回Apacheが起動してくれます。インストールパスはドコでも良いですが、Program Filesよりも上にインストールした方が後々楽になるかもしれません。
 

3. Apacheの設定イロイロ

 最近のApacheは初期設定で既に安全で素敵なサービスが提供できるのですが、折角なのでいじりましょう。設定ファイルはApacheをインストールしたフォルダのどこかにあるconfフォルダの中にあるhttpd.confファイルです。主に変更するべき箇所はドキュメントルートとCGIが動作する箇所の設定です。(日本語設定も少し)
 
 ドキュメントルートはデフォルトでも特に問題はないのですが、CGIの動作を特定ディレクトリ以下に制限するのは面倒なので以下のような感じにしてしまいました。これでドキュメントルート以下の*.cgiと*.plがCGIとして処理されます。

<Directory C:/document root>
Options +ExecCGI
AddHandler cgi-script cgi pl
</Directory>

 

4. mod perlのインストール

 mod perl(mod_perl?)のインストール方法は幾つかあるのですが、多分一番お手軽な方法だと思われるppmを使用したインストール法を試してみました。やり方は簡単。ファイル名を指定して実行から以下のコマンドを実行です。

ppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd

で、インストール途中でApacheのモジュールディレクトリを問い合わせてくるので自分がApacheをインストールしたディレクトリのmodulesディレクトリを正しく入力してあげましょう。
これでインストール自体は終わりです。
 

5. mod perlの設定(Apache側)

 最後にmodperlが動かせるようにApache側の設定を行います。設定ファイルは先程と同じhttpd.confです。今回は私の特殊な要望を満たすために、ドキュメントルートの中のcgiファイルは普通のcgiとして動かすけど、特定フォルダの中の*.cgiファイルはmodperlで動くようにしたいと思います。

 で、試行錯誤した結果の結論だけ書きますと、3で設定したcgi用設定の下に以下の設定を書き加えました。
(各種サイトで推奨されている設定も試して最高に設定が多い状態でまともにApacheが起動する設定だと思います。
perl56と言う部分や他のファイルへのパスは各々のインストール条件によって変わるでしょう。)

LoadFile "C:/usr/local/bin/perl56.dll"
LoadModule perl_module modules/mod_perl.so
PerlModule Apache::Registry
 
<IfModule mod_perl.c>
PerlFreshReStart On
PerlWarn On
PerlRequire "C:/Program Files/Apache Group/Apache/conf/startup.pl"
Alias /test/ "C:/www/site/public_html/test/"
 
<Location /test>
SetHandler perl-script
PerlHandler Apache::Registry
AllowOverride None
Options +ExecCGI
Order allow,deny
Allow from all
PerlSendHeader On
PerlInitHandler Apache::StatINC
</Location>
</IfModule>

また、C:/Program Files/Apache Group/Apache/conf/startup.plの中身は以下です。

BEGIN {
use Apache;
use lib '/usr/Apache/lib/perl';
}
use Apache ();
use Apache::Connection ();
use Apache::Constants ();
use Apache::Server ();
use Apache::Table ();
use Apache::Registry ();
use CGI;
1;

 この用に設定することで、C:/www/site/public_html/test/フォルダ以下に置いたcgiファイルだけがmodperlで動くようになったはずです。検証に使ったcgiファイルは以下のもの

#!/usr/local/bin/perl
 
print "Content-type: text/html\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=${val}
\n";
}

 
ドキュメントルート以下の普通にcgiが動く領域では
GATEWAY_INTERFACE=CGI/1.1という表示がmodperlが動いているtestフォルダの中では
GATEWAY_INTERFACE=CGI-Perl/1.1になります。
また、MOD_PERL=mod_perl/1.29_01-devという表示とPERL_SEND_HEADER=Onが加わることが確認できました。


以上でWindowsへのApache導入とcgi-perl mod_perlの導入が終わりです。
今後カスタマイズ事項があれば追記するかもしれません。


参考
futomi's CGI Cafe - WindowsでApacheサーバを立てよう
メモランダム : Apache2 for Windows NT/2000/XP インストール
Windows + Apache + mod_perl
Apache の設定に関するまとめ - Home Server Technical for Windows
Apache+mod_perlでCGIを使うには?


Posted by kroko 0 Comments: / 0 TrackBack
Comments
Post a comment












Remember personal info?