Apache2のmod_pythonで、バーチャルドメイン全体を1つのスクリプトでさばく

基本線設定ファイルがいじれるなら設定ファイルに書いたほうがいいとかApacheのマニュアルにも書いてあったのでそうする。

バーチャルドメイン自体の設定の復習

バーチャルドメイン自体の設定ファイル群が/etc/apache2/sites-available/にあると仮定する。
defaultをコピーしてそれ用の設定ファイルを作る(ここではhogeとする)

ServerName hoge.example.com

を<VirtualHost *:80>下に書く。

あとは

sudo ln -s /etc/apache2/sites-available/hoge /etc/apache2/sites-enabled/001-hoge
sudo /etc/init.d/apache2 restart

とかするなり。

あとは大前提という物があるので、

sudo apt-get install libapache2-mod-python

しておく。

mod_pythonの設定

ここからメイン。

バーチャルドメインの設定ファイル下、例えばDocumentRootと同じディレクトリをさすDirectoryディレクティブの下に、SetHandler, PythonHandler, PythonDebugを追加する。と、こんな感じ。

        <Directory /var/hoge/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                SetHandler mod_python
                PythonHandler index
                PythonDebug On
        </Directory>

この場合、DocumentRootにおいてある、index.py内のhandler(req)に全てのリクエストが集約される。
あとはreqの中身を見てどうこうすれば良い感じ。
詳しくは404 Not Foundを参照するなり。

基本、index.pyは上のマニュアルにもあるが、

from mod_python import apache

def handler(req):
    req.content_type = "text/plain"
    req.write("Hello World!")
    return apache.OK

みたいな感じになる。使ってみた感じ雰囲気的には非常に軽そうで良い。