0

PHP / Python (Django) の Web サイトがあるとします。Web サイトは複数のインスタンス サーバーで実行されています。つまり、Web サイトの URL は www.test.com であり、ロード バランサーからクライアントを www.server1.com または www.server2.com などに取得できます。

Web サイトにフォームがあり、このフォームの処理が同じページにある場合: 次のような状況が存在する可能性はありますか? : - ユーザーは www.test.com にアクセスします - バックグラウンドで、ロード バランサーを介して、ユーザーは www.server* 1 *.com にアクセスします。彼はフォームに記入します。- フォーム アクション (URL) は www.test.com 用です。バックグラウンドでロード バランサーを介して、www.server* 2 *.com にアクセスします。だからここで、必要なフォームデータ、そしておそらく私の質問にとってより重要な - 「リクエスト」データ(Python Djangoのrequest.SOMETHINGのような)が欠落するでしょうか?以前のセッションで www.server* 1 *.com に保存されていたのに、今は www.server* 2 *.com に保存されていない可能性があります。

4

2 に答える 2

0

エッジ サーバーに転送されるため、要求には常にすべてのデータが含まれます。request.POSTリクエストからrequest.GETのすべてのデータが含まれます。ただし、問題は、セッション データがそのエッジ サーバーで利用できない可能性があることです。たとえば、server1 でセッションを開始し、server2 から別のページを要求したとします。server2 が新しいセッションを割り当て、特定のコンテンツへのアクセスを禁止する場合があります。

このセッションの問題を解決するには、次の 2 つのいずれかを実行できます。

  1. サーバー間でセッションを共有する (中央セッション ストレージ)
  2. ユーザーを常に同じエッジ サーバーに転送します。一部のロードバランサーは、転送先のエッジ サーバーを Cookie に保存します。後続のリクエストでは、ユーザーは毎回同じエッジ ノードに転送されます。その同じエッジ ノードがそのユーザーのセッションを保持するため、問題はありません。
于 2012-01-18T11:40:26.303 に答える
0

はい、これは正当な懸念事項です。Web (HTTP) の性質上、別の要求が別のサーバーに送信される場合があります。この問題は、永続性または粘着性と呼ばれます。

ここでの解決策は、このすべての情報をクライアント側 (Cookie を使用) に保存し、サーバー側のセッションに依存しないことです。したがって、Python/Django を使用してこのように実装するのはあなた次第です。クライアント側のアプローチを使用すると、最高のパフォーマンスが得られ、最も簡単に実装できます。

すべてのクライアント データが Cookie に保存されるため、(HTTPS を使用して) SSL/TSL で接続を暗号化しない限り、このソリューションは中間者攻撃に対して非常に重大なセキュリティ リスクを負うことに注意してください。傍受されました。

于 2012-01-18T11:40:48.187 に答える