Apache 2.2.3のリクエスト処理

VPS上のApache 2.2.3で運用しているTracに急にアクセスできなくなった。
具体的には、名前ベースのヴァーチャルホストでLocationディレクティブでmod_pythonをSetHandlerしている。

2ヶ月くらい前に実験的にインストールして、動作することは確認していた。
本日ひさしぶりに使おうとしてして「404 Not Found」が返ってくるようになった。

環境

OS - CentOS 5

以下は、ソースからビルドした。

Trac - 0.11.6ja
Python - Python-2.6
mod_python - 3.2.8

どちらも/etc/init.d/httpd configtestでSyntax OKである。
また、必要なモジュールはLoadされている。

Locationディレクティブの書き方と、返ってくるHTTPレスポンスコード

  • その1

SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir "/var/svn/trac/"
PythonOption TracUriRoot /trac
SetEnv PYTHON_EGG_CACHE "/var/svn/cache/egg"
PythonDebug On
AcceptPathInfo On

404 Not Foundが返る
access_logには記録されるが、error_logには記録されない

  • その2

SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir "/var/svn/trac/"
PythonOption TracUriRoot /trac
SetEnv PYTHON_EGG_CACHE "/var/svn/cache/egg"
PythonDebug On
AcceptPathInfo On

Deny from all

403 Forbiddenが返る
error_logに「client denied by server configuration」と記録される。

  • svnの場合は意図どおりに動作する

DAV svn
SVNParentPath /var/svn/repos
AuthType Digest
AuthName trac
AuthUserFile "/var/svn/trac/htdigest"
Require valid-user

これはsvnクライアントからでも、WEBブラウザからでも、パスワードを聞いてきて、パスワードが通ればリポジトリにアクセスできる。

  • server_statusを指定すると404が返る

SetHandler server-status

その1、その2と同じ。
「Deny from all」を指定すると403が返るので、Locationディレクティブ自体は有効のはず。
なのに、何故かアクセス制約に引っ掛からないと、404が返ってきてしまう。