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 件のコメント:
コメントを投稿