【问题标题】:Amazon ELB - Sticky session lost of cookieAmazon ELB - cookie 的粘性会话丢失
【发布时间】:2016-04-16 18:47:06
【问题描述】:

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

由于需要我的应用程序,我必须激活会话粘性。 我使用自定义 cookie“sails.sid”作为参考激活了“AppCookieStickinessPolicy”。

问题是我的应用程序需要此 cookie 才能正常工作,但是当我激活会话粘性时(通过基于持续时间的会话粘性或在我的情况下:应用程序控制的会话粘性) ,去我的服务器的标头被修改了,我丢失了我的自定义 cookie,它被 AWSELB (amazon 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"
                    ]
                }
            ]

            ....

        }
    ]
}

【问题讨论】:

  • 您是否更新了 Amazon EC2 控制台以添加您的自定义 cookie 名称和 cookie 策略?另外,您是否尝试过使用不同的 cookie 名称(例如,其中没有句点的名称)?

标签: amazon-web-services cookies amazon-ec2 amazon-elastic-beanstalk amazon-elb


【解决方案1】:

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

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

写一个数据库会话系统比较复杂,当然也有开销,每次http调用都不可避免地涉及到数据库查询。但是,如果这是查询使用主索引,那还不错。

最大的优势是任何请求都可以发送到任何服务器。或者,如果您的一台服务器死机,下一台也可以处理这项工作。对于真正具有弹性的应用程序,数据库会话系统是不可避免的。

【讨论】:

  • 或者您可以在会话中使用 memcached 或 redis 之类的东西。快速访问,不会对您的数据库造成额外负载。
【解决方案2】:

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

如果您在应用程序中设置需要依赖的 cookie,然后期望 ELB 使用该 cookie,它将覆盖您设置的值。

尝试让 ELB 管理会话 cookie。

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2012-05-17
    • 2020-05-02
    • 2015-12-07
    • 2012-02-22
    相关资源
    最近更新 更多