nginxでリバースプロキシ その2。¶
昨日のnginxの話の続き。というか、実質的にはWSGIの設定がメイン。gitwebの動いているノードに、trac-gitを入れて動かす場合、tracdで動かしても良いかもしれないが、mod_python, FastCGI, WSGIのいずれかを使って、tracをApacheで動かしたいのが普通だろう。どれを選択すればよいのか?WSGIのDebianパッケージであるlibapache2-mod-wsgiのcontrolを見るとこんなことが書いてある。
The adapter provides significantly better performance than using existing WSGI adapters for mod_python or CGI.
意訳:mod_pythonやCGIなんて目じゃないぜ。
これはWSGIを使うしかないでしょ。ということで 1 、まず、libapache2-mod-wsgiをインストールする。
$ sudo apt-get install libapache2-mod-wsgi
インストールすると、便利なことに自動的にa2enmod wsgiも実行して、/etc/apache2/mod-enable/wsgi.{load,conf}を作成してくれるおまけ付き。気が利くね。wsgi.confの中身を見ると、全てコメントアウトされているが気にするな。全てデフォルト値が設定されている。とりあえず動かしてみることが重要なので、今は無視して構わん。
/etc/apache2/site-available/defaultの方の設定に移る。とりあえず認証が必要無ければ以下で良い。そうそう、エイリアスの”/trac”は”/trac/”じゃダメなので注意しよう。Directoryディレクティブのパスも最後に”/”を入れちゃダメだ。入れるとちゃんとリバースプロキシされなくなる。
WSGIScriptAlias /trac /var/cache/trac/trac.wsgi
<Directory /var/cache/trac>
Order allow,deny
Allow from all
</Directory>
/var/cache/trac/trac.wsgiには以下のコードを書いておく。
import os
os.environ['TRAC_ENV'] = '/var/cache/trac'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
import trac.web.main
application = trac.web.main.dispatch_request
認証が必要なら、ダイジェスト認証を設定しておこう。 2
<Directory /var/cache/trac>
Order allow,deny
Allow from all
AuthType Digest
AuthName "trac"
AuthDigestDomain /var/cache/trac
AuthUserFile /var/local/trac/.htpasswd
Require valid-user
</Directory>
htdigestコマンドでユーザ、パスワードを設定しておく。Apacheはデフォルトではauth_digestモジュールは無効になっているので有効にしておく必要がある。
$ sudo a2enmod auth_digest
$ sudo mkdir /var/local/trac
$ sudo htdigest -c /var/local/trac/.htpasswd trac user
Adding password for user in realm trac.
New password:
Re-type new password:
Apacheを再起動したら、trac-gitのノードでの作業は終わりだ。
さて、一応本題のnginxでのリバースプロキシの設定はというと、実は非常に簡単。昨日のgitweb向けの設定を以下のように変更すればよい。ここでも注意が必要なのは、”/trac”や”http://git/trac”は、”/trac/”や”http://git/trac/”ではダメなので注意しよう。
upstream git {
server 192.168.xxx.xxx;
}
server {
listen 80;
server_name git.hoge.org;
location / {
proxy_pass http://git/;
}
location /trac {
proxy_pass http://git/trac;
}
}
nginxを再起動すれば、リバースプロキシ経由でtrac-gitにアクセスできるようになる。