私は、nginxによって負荷分散されているいくつかのPHP Webサーバーを持っています。ロードバランス(nginx)環境で、外部APIへの呼び出しから要求しているWebサーバーに応答を戻す方法を教えてください。
Webサーバーは、(私が制御できない)外部APIに要求してから応答を受け取る必要があります。
1)応答が正しい(要求している)Webサーバーに返されることを保証するには、どのような方法がありますか?
2)それぞれの長所と短所は何ですか?
ありがとうございます!
更新(2011-12-05 12時38午後):
達成されるようにしようとしているものにのようないくつかのより多くの背景情報。
nginxを使用してバランスのとれた多数のphp Webサーバーを持つクライアント向けアプリケーションを実行します。クライアントは、これらのWebサーバーのいずれかに誘導することができます。
nginx
|
--------------------------------
| | |
web1 web2 web3
外部(サードパーティ製のAPI)からデータを取得し、クライアントに返す必要がある場合があります。そのデータへのリクエストは、Webサーバーのいずれか(クライアントがもともとnginxによって指示されたものに応じて)に由来する可能性があります。 APIからのデータがクライアントに表示されるように要求元のWebサーバーに返されるようにする必要があります。
応答は常に要求しているWebサーバーに直接返されますが、そうではありませんか?確かに要求しているWebサーバーはリモートAPIへの直接TCPストリームを開きます。つまり、同じTCPストリームを使用して応答が返され、常に適切な場所に戻ってきます。サーバのAPIに何らかのプロキシを設定していない限り、負荷分散を無意味にします。それでもプロキシーが非常に奇妙な方法で設計されていない限り、これはまだ問題ではないと思っていたでしょう。 – DaveRandom
@DaveRandom「要求しているWebサーバーが、リモートAPIへの直接TCPストリームを開くことは間違いありません」 - あなたが正しいとは思わない。 192.168.1.2からnginx public ip xx.yy.zz.ppを介してリクエストを行い、APIレスポンスがパブリックIPに戻って192.168.1.3にリダイレクトされます。 ip_hashディレクティブはそれを防ぎます。 –
@narcisraduしかし、NATedだけではありませんか?これは、(TCP/IPモデルの)レイヤ3で処理する必要があるようなもので、レイヤ4に何かを追加すると、複雑さと処理オーバーヘッドが増えます。 ... – DaveRandom