负载平衡器后面有两台物理Apache服务器。 应该设置负载平衡器,以便在第一次请求后始终将用户发送到同一物理服务器,以保留会话。
这对我们的Web应用程序正常工作,直到我们添加到设置的SSL。 现在,用户可以成功login,看到主页,但点击任何其他内部链接logging用户的权利。 我将这个问题追溯到这样的事实,即当初始authentication由服务器1执行时,点击内部链接导致请求发送到服务器2.服务器2不共享与服务器1的会话,并且用户被踢出。
我该如何解决?
我需要在两台服务器之间共享会话吗? 如果是这样,你能指点一个好的指导吗?
谢谢。
如果您希望在负载平衡器中拥有会话粘性,则必须在负载平衡器上终止SSL。 这意味着您必须将SSL证书安装到负载均衡器中。
另一个解决scheme是configuration负载均衡器以使用SSL(HTTPS)的源IP粘性。
第三个解决scheme是将会话保存在一个公共数据库(例如memcached,SQL数据库)中。 对于.NET请参阅: http : //support.microsoft.com/kb/317604对于PHP请参阅: http : //kevin.vanzonneveld.net/techblog/article/enhance_php_session_management/
您的负载平衡器很可能使用HTTP标头数据来确定将用户发送给哪个方框(而不是通过IP地址来判断)。
[如果你能告诉我们什么样的负载平衡器使用有用的信息来configuration它可能会在这里:-)]
除了重新configuration负载均衡器之外,您可能还要考虑在两台服务器之间共享会话。 你可以这样做:
(共享会话的优势在于您的服务器提供了无缝冗余:如果服务器1closures以进行维护,服务器2可以在不强制用户重新login的情况下获取所有会话)
这听起来像(很难说没有更多的信息肯定)持久性没有完全实现在负载平衡器的Apacheconfiguration。 查看mod_proxy_balancer的Apache文档中的Load Balancer Stickyness部分。
平衡器支持粘性。 当一个请求被代理到某个后端时,来自同一个用户的所有后续请求都应该代理到同一个后端。 许多负载均衡器通过将客户端IP地址映射到后端的表来实现此function。 这种方法对于客户端和后端是透明的,但是会遇到一些问题:如果客户端本身被隐藏在代理服务器后面,则负载分配不均匀;当客户端使用在会话期间发生变化的dynamicIP地址时粘滞性错误;映射表溢出。
模块mod_proxy_balancer在两种替代方式之上实现粘性:Cookie和URL编码。 提供cookie可以由后端完成,也可以由Apache Web服务器本身完成。 url编码通常在后端完成。
从该文档是以下示例:
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy balancer://mycluster> BalancerMember http://192.168.1.50:80 route=1 BalancerMember http://192.168.1.51:80 route=2 ProxySet stickysession=ROUTEID </Proxy> ProxyPass /test balancer://mycluster
你说负载平衡器是设置为倾向于继续发送用户到他们的第一个请求相同的服务器 – 这听起来不是在SSL上工作,但在SSL之前工作。 听起来像负载平衡器的configuration问题; 你能提供什么信息,以及如何configuration?