首页 文章

亚马逊ELB - 粘性会话丢失了cookie

提问于
浏览
10

我在Elastic Beanstalk上有一个Node.js应用程序,它运行在负载均衡器( elb )后面的多个ec2实例上 .

我的应用程序需要的原因,我不得不激活会话粘性 . 我使用自定义cookie“sails.sid”作为参考激活了“AppCookieStickinessPolicy” .

问题是我的应用程序需要这个cookie才能正常工作,但是当我激活会话粘性时(通过基于持续时间的会话粘性或在我的情况下: Application-Controlled Session Stickiness ),进入我的服务器的 Headers 被修改,我丢失了我的自定义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"
                    ]
                }
            ]

            ....

        }
    ]
}

2 回答

  • 1

    ELB设置的粘性会话cookie用于标识集群中要将请求路由到的节点 .

    如果您在应用程序中设置了一个需要依赖的cookie,那么期望ELB使用该cookie,它将覆盖您正在设置的值 .

    尝试简单地允许ELB管理会话cookie .

  • 1

    我花了很多时间尝试ELB粘性功能,并将来自同一客户端的请求路由到后端群集服务器中的同一台机器 .

    问题是,它并不总是100%工作,所以我不得不使用存储在MySQL中的会话编写备份程序 . 但后来,我意识到我不需要ELB粘性功能,我只能使用MySQL会话系统 .

    编写数据库会话系统比较复杂,当然每个http调用都不可避免地涉及数据库查询 . 但是,如果这是查询使用主索引,那就不是那么糟糕了 .

    最大的好处是任何请求都可以发送到任何服务器 . 或者,如果您的某个服务器死亡,下一个服务器也可以处理该作业 . 对于真正有弹性的应用程序,数据库会话系统是不可避免的

相关问题