mod_perlの呪い

 Apacheの動的モジュールであるmod_perlをインストールしようとするも、-KPICのオプションが認識できないというエラーを出し、ひたすらにコンパイルを弾かれる。どうやらMakefile生成時に使うPerlSolaris仕様であるためにSolarisコンパイラに最適になるようにオプションを指定しているのに対し、make時にccの代わりにgccコンパイラを使おうとしているのが原因らしい。
 解決法としてはPerlgccでコンパイルして、gccでコンパイルされたPerlを用いてMakefile.PLを実行しなければならないらしい。
 仕方がないので先にPerlのコンパイルをgccで行う。
 
 おかげでなんとか、mod_perlのインストールまでは出来た。
 httpd.confを修正して次のような行を付け足す。


<IfModule mod_perl.c>
<Location /***>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
Allow from all
PerlSendHeader On
</Location>
</IfModule>
Alias /***/ "/***/***/"
<Directory /***/***/***>
#AllowOverride AuthConfig Options Limit
AllowOverride All
Options ExecCGI MultiViews Indexes SymLinksIfOwnerMatch
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

 
 これでCGIが表示できるようになった。しかし、喜びもつかの間、CGI以外のファイルにアクセスできない。読み出し権限を全部有効にしてても、

file permissions deny server execution

 
 と出てきてアクセスが弾かれる。あちこちのサイトから情報を集めて実践しても解決しなかったのだが、1つ分かったことはmod_perlが何か悪さをしているのではないかということ。よく見れば、現在の設定ではmod_perlとDirectoryの両方で設定を記述しているので、これを1つにまとめてみる。
 
 というわけで、以下のように設定を書き換えてみる。

#<IfModule mod_perl.c>
# <Location /***>
# SetHandler perl-script
# PerlHandler Apache::Registry
# Options +ExecCGI
# Allow from all
# PerlSendHeader On
# </Location>
#</IfModule>
Alias /***/ "/***/***/"
<Directory /***/***/****>
#AllowOverride AuthConfig Options Limit
AllowOverride All
Options ExecCGI MultiViews Indexes SymLinksIfOwnerMatch
<Files *.cgi>
SetHandler perl-script
PerlHandler Apache::Registry
PerlSendHeader On
</Files>
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

 これが正解だったらしく、cgi以外のファイルにもアクセスできるようになる。
 IfModuleとDirectoryのディレクティブは重複して書かないようにしないと駄目みたいですね。