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

こんな感じのサンプルをよく見かける。

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

ProxyRequests Off
ProxyPass        / balancer://cluster/
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>

この場合、Mongrel Cluster への分散はできているが
静的コンテンツの処理までMongrel に振られてしまう。
# 承知の上で、説明のために簡略化してるだけだったりして。


ということで以下のように修正してみた。

DocumentRoot /path/to/rails_app/public

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

ProxyRequests Off
#ProxyPass        / balancer://cluster/
ProxyPassReverse / balancer://cluster/

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/images/.*
RewriteCond %{REQUEST_URI} !^/javescripts/.*
RewriteCond %{REQUEST_URI} !^/css/.*
RewriteRule ^/(.*)$ balancer://cluster/$1 [P]

<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>

これで、静的コンテンツはApacheが処理してくれるようになる。


ちなみに、ApacheRAILS_ROOT/public へアクセスできるように
実行ユーザなりディレクトリのパーミッションなりを変更すること。