1

私は負荷分散にまったく慣れていないので、Amazon の Elastic Load Balancer をサブドメインでうまく機能させるのに問題があります。

ロード バランサーの背後に 2 つの EC2 サーバーがあります。mydomain.comwww.mydomain.comにアクセスすると、2 つの URL が異なる EC2 サーバーから提供されます。セッションが正しく機能するように、www.mydomain.commydomain.comの両方を同じサーバーから提供する必要があります。

次のように、ロードバランサーの「スティッキーネス」を LBCookieStickinessPolicy に設定しています。

ここに画像の説明を入力

そして、私の 2 つの EC2 インスタンスは両方ともロード バランサーの背後で「サービス中」です。

ここに画像の説明を入力

トラブルシューティングに役立つかどうかはわかりませんが、Apache の構成は次のようになります。

ここに画像の説明を入力

Firebug でセッションを表示すると、次のように表示されます...

mydomain.com の場合:

ここに画像の説明を入力

www.mydomain.com の場合 (追加の「www.」に注意してください)

ここに画像の説明を入力

理由はわかりませんが、www.mydomain.com の Cookie を表示すると、実際には 2 つの AWSELB Cookie が設定されています。

私は Zend Framework を使用しており、cookie_domain を次のように設定しています。

Zend_Session::start(array('cookie_domain' => '.mydomain.com'));

これは、負荷分散された 2 つの EC2 サーバーにサイトを移動する前は、問題なく機能していました。私たちのサイトでは、api.mydomain.com や my.mydomain.com などのいくつかのサブドメインを使用しているため、cookie_domain が重要になります。そして、確かに、これは問題ないかもしれません。サブドメイン間でロード バランサ セッションが「スティッキー」に機能するようになると、セッション変数が期待どおりに機能する可能性が非常に高くなります (願わくば!)。

「www.」がドメイン名に追加されますか?

ありがとう!

4

3 に答える 3

4

クッキーは、サブドメイン部分を含むドメインごとに設定されます。http://example.comにアクセスすると www.example.com Cookie を読み取ることができないため、ELB は新しい Cookie を設定します。

この問題に対処するために、Apache を 301 まで設定して、すべての着信要求を 1 つの正規ドメインにリダイレクトすることができます。つまり、すべてのhttp://example.com/ * がhttp://www.example.com/ *にリダイレクトされるか、またはその逆になります。その後、正規ドメインの Cookie を処理するだけで済み、セッション スティッキネスは期待どおりに機能します。

于 2013-07-29T14:35:12.937 に答える
0

セッションを管理する 1 つの方法は、共有セッション ストレージを利用することです。セッション データの保存にファイル システム (たとえば、PHP のデフォルト) を使用する代わりに、ElastiCache (memcached) や DB などをセットアップして、セッション データの保存を処理します。そうすれば、アプリケーションはそれがどのサーバー上にあるかを気にしなくなります。プルするセッション データの中央ストアが 1 つあります。

この概念の基本について興味深い記事を見つけました: http://shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html

于 2012-10-24T15:15:25.643 に答える