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を書き換えてくれなければ、意味がないと思うのですが。。。