具有负载平衡的会话cookie(非粘性会话)



我扫描了RFC 6265,但没有找到以下问题的答案。

我想把一个天真的round-robin负载均衡器放在一个网络应用程序的多个服务器前面。负载均衡器不提供粘性会话。因此,客户端通常会在连续的请求中从一个应用服务器跳到另一个应用程序服务器。

在第一次连接时,客户端没有SID,而是随机路由到服务器A。
服务器A使用会话cookie(nonce)进行响应。

在下一次连接时,客户端会在HTTP标头中包含来自服务器A的SID。这一次,客户端被随机路由到服务器B。服务器B看到的SID(希望!)与它发布的任何SID都不匹配。会发生什么?服务器B是否只是忽略"坏"SID,或者抱怨,或者忽略请求,或者什么?

这个想法是,我根本不想使用会话cookie。我想避免粘性的所有复杂性。但我也知道,无论如何,我的服务器可能会生成会话cookie,而且会更深入地查找会话cookie。

我如何确保服务器忽略(或者最好不要设置)会话cookie?

我认为这个问题的答案会因服务器上运行的应用程序而异。尽管任何负载均衡器都有粘性会话,但只要池中的所有服务器都可以通过集中式数据库访问相同的会话状态,就可以在没有粘性会话的情况下进行操作。

由于您谈论的是会话ID,我猜应用程序确实依赖于会话状态才能正常工作。在这种情况下,如果请求的会话ID"不正确",则很可能会被丢弃,并提示用户登录——同样,具体行为取决于应用程序。如果您完全禁用会话cookie,问题可能会变得更糟,因为即使没有ID也可能导致登录提示。

如果您真的想避免负载均衡器的复杂性,那么您将需要引入一些机制,通过该机制,所有服务器都可以处理来自所有会话的请求。通常,这采用集中式数据库或某些其他共享存储的形式。这样,无论服务器处理该特定请求,都可以保持会话状态。

维护会话状态是负载平衡的症结之一(双关语),但简单地忽略或避免会话cookie并不是解决方案。

最新更新