1

我对负载平衡很陌生,我在让亚马逊的弹性负载平衡器与子域很好地配合时遇到了一些问题。

我的负载均衡器后面有两台 EC2 服务器。当我访问mydomain.comwww.mydomain.com时,这两个 url 由不同的 EC2 服务器提供。我需要从同一台服务器同时提供www.mydomain.commydomain.com,以便会话正常工作。

我将负载均衡器“粘性”设置为 LBCookieStickinessPolicy,如下所示:

在此处输入图像描述

我的两个 EC2 实例都在我的负载均衡器后面“服务中”:

在此处输入图像描述

我不知道它是否对故障排除有用,但我的 apache 配置如下所示:

在此处输入图像描述

当我在 Firebug 中查看会话时,我看到以下内容......

对于 mydomain.com:

在此处输入图像描述

对于 www.mydomain.com(请注意附加的“www.”)

在此处输入图像描述

我不知道为什么,但在查看 www.mydomain.com 的 cookie 时实际上设置了两个 AWSELB cookie。

我正在使用 Zend 框架,我正在像这样设置我的 cookie_domain:

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

在将站点移动到两个负载平衡的 EC2 服务器之前,这在过去运行良好。我们的站点使用了一些子域,例如 api.mydomain.com 和 my.mydomain.com,这使得 cookie_domain 很重要。而且,当然,这可能没问题。很有可能一旦我们让负载均衡器会话“粘”在子域之间正常工作,会话变量将按预期工作(希望如此!)。

任何想法为什么我们的网站在“www.”时从不同的服务器提供服务。是添加到域名吗?

谢谢!

4

3 回答 3

4

Cookies 由域设置,包括子域部分。当您访问http://example.com时无法读取 www.example.com cookie ,因此 ELB 设置了一个新 cookie。

为了解决这个问题,您可以将 Apache 设置为 301,将所有传入请求重定向到一个规范域。也就是说,要么所有http://example.com/ * 都被重定向到http://www.example.com/ *,反之亦然。然后,您只需处理规范域上的 cookie,您的会话粘性就会按预期工作。

于 2013-07-29T14:35:12.937 回答
1

请看下面的链接,然后你就明白了。http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html

于 2013-11-11T10:17:40.293 回答
0

管理会话的一种方法是利用共享会话存储。不要使用文件系统来存储会话数据(例如 PHP 的默认设置),而是设置 ElastiCache (memcached) 或 DB 之类的东西来处理会话数据的存储。然后你的应用程序就不会关心它在哪个服务器上,它有一个会话数据的中央存储可以从中提取。

关于这个概念的基础,我发现一篇有趣的文章在这里:http ://shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html

于 2012-10-24T15:15:25.643 回答