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が処理してくれるようになる。
ちなみに、Apache が RAILS_ROOT/public へアクセスできるように
実行ユーザなりディレクトリのパーミッションなりを変更すること。