我的生产服务器在 AWS 上的负载均衡器后面运行(它们基于 AMI 进行扩展)。有些网站有 cookie - 例如,一家有多个地点的餐厅,每个地点都设置在 cookie 中。
我注意到 cookie 没有跨多个服务器保存,因此我通过进入负载均衡器 -> 端口配置
,单击启用应用程序生成的 Cookie 粘性
来解决此问题>,并插入 cookie 的名称。
据我所知,这只允许一个 cookie 名称,而我有很多 - 例如 Google Analytics。 (也许它们可以用逗号分隔,我还没有检查过。)
我的端口配置现在如下所示:
80 (HTTP) forwarding to 80 (HTTP)
Stickiness: AppCookieStickinessPolicy, cookieName='MY_COOKIE'
我想知道是否有任何方法可以允许识别任何应用程序生成的 cookie,而不必单独命名它们。
非常感谢任何意见。谢谢!
最佳答案
我认为您误解了 session 粘性的用途和目的。
如果您没有共享 session 存储 - 即 memcached、redis 或可供池中所有实例使用的东西,那么您可能正在使用涉及本地存储的 session 机制 - 将它们保存在本地文件系统是php的常用机制,而IIS通常会有一个本地 session 存储。
如果您使用本地 session 存储,那么您需要确保所有后续请求都返回到存储 session 的节点 - 因为如果没有,那么您的应用程序在 session 中保存的任何信息不再被提供。
为此,您有两种选择:允许 ELB 设置和管理 session 亲和性 Cookie,或者让它根据您设置的 session Cookie 来执行此操作。请注意,在这两种情况下,ELB 都会创建一个名为 AWSELB 的新 cookie 和一个值,该值允许它将请求映射到最初创建它的实例 - 但如果您将其绑定(bind)到 ELB 仅生成时设置的 session cookie当 AWSELB 看到新的 session cookie 时,它会返回 cookie。
听起来应用程序问题可能是因为您从 session 中提取位置,而不是从 cookie 中提取位置,但这只是猜测。
关于amazon-web-services - 应用程序控制的 session 粘性: enable stickiness on all cookies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34231439/