続・Apache2.2(mod_proxy_balancer) + Mongrel 環境の設定例

http://d.hatena.ne.jp/mhag/20071022/1193035548
http://d.hatena.ne.jp/mhag/20071022/1193040256
昨日書いた上記エントリでは、特定のサブディレクトリに格納されている
静的コンテンツ(画像やCSS, JS ファイル)はApache で処理できるが、
RAILS_ROOT/public 直下にあるhtml などはMongrel に渡されてしまう。


ということで、あとで書く。


(2007/10/29 追記)
Apache2.2 + Mongrel 環境向けドキュメントが公式に用意されていた。
Rails であらかじめ用意されているRAILS_ROOT/public/.htaccess
Apache + Mongrel 仕様に書き直した感じ + α(deflate とか)。
これで事足りる人はこっちの設定を使ったほうがよいと思う。
この設定を使った場合

# サブディレクトリとコントローラの判別ができないため


サブディレクトリをApache 側で処理したい場合、以下の設定を用いるとよい。

DocumentRoot /path/to/rails_app/public

<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>

ProxyRequests Off
RewriteEngine On
# balancer-manager を使用しない場合は不要
RewriteRule ^/balancer-manager$ - [L]
# index.html の代わりにRails アプリ起動
RewriteRule ^/$ balancer://cluster/ [P,QSA,L]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ balancer://cluster/$1 [P,QSA,L]
ProxyPassReverse / balancer://cluster/

<Proxy balancer://cluster/>
  BalancerMember http://127.0.0.1:3000 loadfactor=20
  BalancerMember http://127.0.0.1:3001 loadfactor=20
  BalancerMember http://127.0.0.1:3002 loadfactor=20
</Proxy>

この設定を行うことで、静的コンテンツと動的コンテンツの切り分けを
完全に行うことができる(はず)。