Apache+perl


はじめに

  • PerlでCGIを行いたいときは、Apacheにperlを呼び込み起動させるか、 ApacheにperlのDSDモジュールを組み込んで置くかである。前者はアクセスが増えると負担が増え遅くなる。
  • Apache用のPerlモジュールはPerl-Apacheサイト"http://perl.apache.org/"より、 例えばmod_perl-1.26.tar.gzをダウンロードする( http://perl.apache.org/dist/).
  • tarファイルを展開すると、"mod_perl-1.26"というフォルダが現れるので、ホームディレクトリ等に移動させる。

Perlモジュールを組み込んでみる

  • Apache Perl モジュールmod_perlの組み込みにはApacheに直接組み込む方法と、モジュールとしてロードする方法がある。さらにApacheを再度コンパイルしなくても良い方法としてはmod_perlをApacheのソースツリー外で、Dynamic Shared Object (DSO)としてコンパイルし、それをApacheのインストール先に移す方法を説明する。
  • 展開されたmod-perlのフォルダのなかに、"INSTALL.apaci"という解説があるので、それに従う。まずコマンドラインから展開されたmod_perlのディレクトリに入る。
$ cd mod_perl-1.X
  • 次に、mod-perlのフォルダの中には、コンパイル用の Makefileがあるので、これを利用する。その際、Mac OS X にデフォルトでインストールされているApacheのサポートツールapxsのパス"/usr/sbin/apxs"をオプション指定する。
$ perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/sbin/apxs EVERYTHING=1 
$ make install
  • これで、モジュール"libperl.so" は自動的に、Apacheのmodule "/usr/libexec/httpd/"の中に移され、適切なLoadModule?AddModule?は"/etc/httpd/httpd.conf"ファイルに以下の用に追加される。
#/etc/httpd/httpd.conf
LoadModule perl_module libexec/httpd/libperl.so 
AddModule mod_perl.c 
  • Apacheを"/usr/sbin/apachectl restart" で再起動させる前に、httpd.confの設定を次のように済ます。

httpd.conf

  • 上述のようにモジュールがインストールされれば、今度は、セキュリティーの観点等からデフォルトでは、Offになっている CGIの設定を変更する必要がある。 さらにperl スクリプトが指定されたウェブの公開用のフォルダーtreeの外側のディレクトリで走るようにhttpd.confの設定を変更しなければならない。
  • ScriptAlias? /cgi-bin/ "/Library/WebServer?/CGI-Executables/":これでエリアス"/cgi-bin/"で、"Library/WebServer?/CGI-Executables/"においたスクリプトを走らす。
  • CGIを走らせたいディレクトリ<Directory>のOptionにExecCGIを追加する。Server Side Includes (SSI)とCGI を使用して、アクセスカウンターなどを作りたいなら、そ<Directory>に、さらにOptionにIncludesを追加する。
  • <Directory "/Library/WebServer?/CGI-Executables"> と </Directory>の間に、 "Options None"のかわりに"Options ExecCGI"を追加する。
  • "AddHandler? cgi-script .cgi"のコメントアウトをはずし、拡張子".cgi"のファイルを認識させる。
  • SII を拡張子.shtmlで走らせるなら、
#AddHandler sever-parsed .shtml
#AddType text/html .shtml
  • コメントアウトをはずす。SSI を拡張子.htmlで走らせたいなら、
AddHandler sever-parsed .html
AddType text/html .html
  • 許可するディレクトリ<Directory>に追加する。
  • 設定が終われば、Apacheを再起動("/usr/sbin/apachectl restart")する。

Perl-CGIの動作チェック:

  • 次に、CGI を起動させるための、ウェブのツリー内に置くHTMLファイルでは、CGIスクリプトの指定は、先にhttpd.confで設定したエリアス指定をする。つまり"/Library/WebServer?/CGI-Executables/test.cgi" の替わりに、"/cgi-bin/test.cgi"とする。
  • もし、SSIをperlのCGIスクリプトで利用するなら、perlのCGIスクリプト側で、" Print" 命令等で、変数をウェブに返すためには、 その前に、Print "Content=ype: text/plain\n\n"; 等を命令しておく必要がある。さらに呼び込むHTMLファイル側では、<!--#exec cgi="cgi-bin/test.cgi"-->というように、cgi指定を行う。