サービスがA国とB国ユーザーが対象で、それぞれの国にServerがあります。
最初は、リバースプロキシーとmod_proxy_balancerモジュールで出来るのでは無いかと思っていたのですが
A mod_proxy_balancerにアクセス元IPにより振り分ける先を指定するようなことができるのか?
B Aが可能だとしても、通信がA国内のbalancer → B国内のリバースプロキシーServer → A国内へのレスポンス となり無意味(改悪)なのではないか?
という疑問が出てきました。
上記疑問と、解決策を教えて下さい。
やりたいことは A国内からのアクセスについてはA国内のServerが B国内からのアクセスについてはB国内のServerが それぞれ応答するという物です。
そもそも、リバースプロキシだと、クライアントが接続する Web サーバはリバースプロキシとなるサーバであって、mod_proxy_balancer を使うと、リバースプロキシの裏に隠れた複数の Web サーバでバランスを取ることができるだけで、クライアントから見た接続は、リバースプロキシであることに違いありません。
クライアント ── リバースプロキシ ├ ── Web サーバ A └─── Web サーバ B
クライアントが Web サーバ A や Web サーバと、直接接続する事はありません。
もし、自前で用意した DNS サーバがあるなら、DNS の応答で振り分ける手はあります。
UNIX 系 OS で一般的な DNS サーバである BIND の機能で、問い合わせ元の IP アドレスで答えを変える「view」という機能が古くからあります。
実用 BIND 9で作るDNSサーバ(13):次世代のセキュリティ拡張DNSSECをBIND 9で実現 (3/3) - @IT
A 国用の view、B 国用の view、その他の view と作っておけば、同じ URL で、ソースアドレス毎に別のサーバへ誘導できます。
ただ、条件があって、
という必要があります。前者は当然として、後者に関してありがちなのは、マスターとなる DNS サーバは自分で用意した DNS サーバであっても、スレーブになる DNS サーバが、ISP のサービスを使っている、という事が多いと思います。この場合、スレーブ側の DNS サーバに問い合わせが行くと、当然、ISP 側の DNS サーバで、こっちの都合と同じ view が切られている訳ではないので、「ソースアドレス毎に」とはなりません。
その他に、view を使っている時のマスターからスレーブへのゾーン転送の問題とか、気をつける点は他にもありますが、環境が用意できれば、できない話ではないと思います。