当一个请求中存在多个AWSELB cookie时,AWS ELB会话粘性问题

我有两个Web应用程序 – App-A和App-B – 运行在两个EC2实例中(两个Web应用程序均在两个实例中运行),前端都是AWS ELB。 会话粘度使用“应用程序生成的Cookie粘性”启用,cookie设置为“JSESSIONID”。

以下是scheme:

1)用户首先尝试访问App-B。 请求转到Node-A,app创build一个path为“/ appb /”的JSESSIONID,ELB为同一path生成一个AWSELB cookie。

设置cookie标题来到浏览器:

Set-Cookie: JSESSIONID=8629A2C6FA26A99678599B0868511610; Path=/appb/; Secure; HttpOnly Set-Cookie: AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6B3EA2E2C6CEE56E4F76FCE48DFDA95F1F20ED1ADEED570326993D2492C17C070ED41500F3EDC7EB993ED53188BF73D37301213483075952D1ADAD619C3C890672;PATH=/appb/;SECURE;HTTPONLY 

2)然后用户尝试访问App-A。 请求转到节点B,app创build一个path为“/”的JSESSIONID,ELB为同一path生成一个AWSELB cookie。

设置cookie标题来到浏览器:

 Set-Cookie: JSESSIONID=5DA3507629D0CB34DE1B032FA71D1CB2; Path=/; Secure; HttpOnly Set-Cookie: AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6BC5080020E5701A0FB3756B152B401A70BF4CA755D30D9B06C82E5C1EB2E81E99C160A62D108BDB79947DEF2E2421C11C513C2C7452FA63B46EE8DF693FB5ED03;PATH=/;SECURE;HTTPONLY 

3)现在用户再次尝试访问App-B。 浏览器将JSESSIONID cookies和2个AWSELB cookies发送给它,因为App-A的cookies是为“/”创build的。 据我所知,根上下文的cookie应发送到同一个域中的所有其他web上下文。

以下是前往App-B的Cookie头文件:

 Cookie: JSESSIONID=8629A2C6FA26A99678599B0868511610; AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6B3EA2E2C6CEE56E4F76FCE48DFDA95F1F20ED1ADEED570326993D2492C17C070ED41500F3EDC7EB993ED53188BF73D37301213483075952D1ADAD619C3C890672; JSESSIONID=5DA3507629D0CB34DE1B032FA71D1CB2; AWSELB=B321B10B128ADF1E237E8419717E1CC409A63A5C6BC5080020E5701A0FB3756B152B401A70BF4CA755D30D9B06C82E5C1EB2E81E99C160A62D108BDB79947DEF2E2421C11C513C2C7452FA63B46EE8DF693FB5ED03 

在这种情况下,我遇到会话粘性问题,连续的浏览器请求App-B转到两个节点,而不是只转发到Node-A。

我很好奇AWS ELB在这种情况下如何pipe理会话粘性。 根据什么从2中select1个AWSELB cookie? 我错过ELB中的一些configuration吗?

提前致谢。

这很简单,通过规则和标准练习,您需要为一个应用程序使用ELB(但是没有任何东西阻止您使用ELB中的多个应用程序)。

解决scheme您需要为2个不同的应用使用2个ELB

  • 说明:

ELB的目的不仅仅是将负载分配给不同的节点,还用于维护可用性和扩展性(使用高可用性服务器)。

要实现可用性,您需要提供健康检查策略,如果不可用,将标记节点停止服务 。 如果您打算将一个ELB用于多个应用程序,您将提供哪个应用程序的健康检查? 这将基本上打败高可用性的目的。

所以你需要最终为每个App创build单独的ELB。 这将解决您的常见AWLELB cookie的问题。 因为两个不同的ELB都有不同的AWSELB cookies。

顺便说一句,AWS ELBs并没有被优化成可以完成这样的多种function。 请阅读https://www.linkedin.com/pulse/key-benefits-limitation-aws-elb-admin-cloudfoqus

—当单一IPstream量生成stream量时,Amazon ELB坚持请求 – 这一点让很多使用Amazon ELB的用户感到意外。 Amazon ELB行为有点奇怪,当来自单个或特定IP范围的传入stream量,它不能有效地完成循环,并坚持请求。