我在Elastic Beanstalk上有一个Node.js应用程序,它运行在负载均衡器后面的多个ec2实例上( elb )。
我的应用程序需要的原因,我必须激活会话粘性。 我激活了" AppCookieStickinessPolicy"使用我的自定义cookie" sails.sid"作为参考。
问题是我的应用程序需要这个cookie才能正常工作,但是当我激活会话粘性时(通过基于持续时间的会话粘性或在我的情况下:应用程序控制的会话粘性) ,进入我服务器的标题被修改,我丢失了自定义cookie,由AWSELB(亚马逊ELB)cookie取代。
如何配置负载均衡器以不替换我的cookie?
如果我理解的话, AppCookieStickinessPolicies 必须保留我的自定义Cookie,但事实并非如此。 我在某处做错了?
提前致谢
我的负载均衡器说明:
{
"LoadBalancerDescriptions": [
{
"AvailabilityZones": [
"us-east-1b"
],
....
"Policies": {
"AppCookieStickinessPolicies": [
{
"PolicyName": "AWSConsole-AppCookieStickinessPolicy-awseb-e-y-AWSEBLoa-175QRBIZFH0I8-1452531192664",
"CookieName": "sails.sid"
}
],
"LBCookieStickinessPolicies": [
{
"PolicyName": "awseb-elb-stickinesspolicy",
"CookieExpirationPeriod": 0
}
],
"OtherPolicies": []
},
"ListenerDescriptions": [
{
"Listener": {
"InstancePort": 80,
"LoadBalancerPort": 80,
"InstanceProtocol": "HTTP",
"Protocol": "HTTP"
},
"PolicyNames": [
"AWSConsole-AppCookieStickinessPolicy-awseb-e-y-AWSEBLoa-175QRBIZFH0I8-1452531192664"
]
}
]
....
}
]
}
答案 0 :(得分:1)
ELB设置的粘性会话cookie用于标识群集中要将请求路由到的节点。
如果您在应用程序中设置了一个需要依赖的cookie,那么期望ELB使用该cookie,它将覆盖您正在设置的值。
尝试简单地允许ELB管理会话cookie。
答案 1 :(得分:1)
我花了很多时间尝试ELB粘性功能,并将来自同一客户端的请求路由到后端群集服务器中的同一台机器。
问题是,它并不总是100%工作,所以我不得不使用存储在MySQL中的会话编写备份程序。但后来,我意识到我不需要ELB粘性功能,我只能使用MySQL会话系统。
编写数据库会话系统比较复杂,当然每个http调用都不可避免地涉及数据库查询。但是,如果这是查询使用主索引,那就不那么糟了。
最大的好处是任何请求都可以发送到任何服务器。或者,如果您的某个服务器死亡,下一个服务器也可以处理该作业。对于真正有弹性的应用程序,数据库会话系统是不可避免的。