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が返ってきてしまう。