2014年6月25日水曜日

mod_proxy mod_proxy_balancer と mod_dirを使う時の注意






mod_proxy を使って、バックエンドサーバーにリクエストを振り分けていたときの話です。




ServerName www.example.com


ProxyPass / balancer://cluster/
ProxyPassReverse / balancer://cluster/

<Proxy balancer://cluster/>
Balancermember http://bk1.example.com loadfactor=50
Balancermember http://bk2.example.com loadfactor=50
</Proxy>



上記のように設定して、www.example.com → bk1.example.com と bk2.example.com にリクエストがそれぞれ渡されます。


ここで、bk1 や、bk2 側で、mod_dir を利用したリダイレクトが起こった場合に


クライアントに戻されるURLが問題になりました。




クライアント → http://www.example.com/test → http://bk1.example.com/text

                          ↓ mod_dir

クライアント ← http://bk1.example.com/test/ ← http://bk1.example.com/test/



mod_dir は、URLがスラッシュ(/)で終わっていないときに、スラッシュをつけたURLに変換してくれます。


ただし、リダイレクトのURLがどうも http:// からのフルパスで変換するみたいで


バックエンドサーバーのServerNameのままクライアントにリクエストを返してしまいました。



ProxyPassReverse / balancer://cluster/


上記を設定しているのでURLの書き換えをしてくれると思ってたのですが


どうも書き方が違うらしく



ProxyPassReverse / http://bk1.example.com/
ProxyPassReverse / http://bk2.example.com/


こう書くことで、意図したURLの書き換えをしてくれました。


しかし、ProxyPassReverse / balancer://cluster/ この記述は、何をしてるんですかね?


URLを書き換えてくれなければ、意味がないと思うのですが。。。





0 件のコメント: