负载平衡环境中未设置 Cookie

负载平衡环境中未设置 Cookie

我有一个 Nginx 负载均衡器,用于平衡两台提供 PHP 内容 (Moodle) 的 nginx 服务器。它们共享同一个数据库,并使用单独的服务器上的 NFS 共享使用同一个会话目录。

我正在运行 PHP 5.4.1 和最新版本的 Moodle。

目前,负载平衡工作正常,我可以使用代理访问两个工作节点。但是,登录 Moodle 时,我收到一条错误消息,提示已禁用 cookie。显然,禁用 cookie 是可行的,登录其中一个工作节点时一切正常。单独访问节点时,会设置 MoodleSession cookie,但通过负载平衡器访问时,根本不会设置 cookie。

我曾尝试更改 cookie 模式以使用 MySQL 数据库,但这也不起作用。

我该怎么做才能让多个工作节点设置服务器存储在公共目录(NFS)中的 cookie?

答案1

您可能想要使用 明确转发 Set-Cookie 标头 proxy_pass_header Set-Cookie

一般来说,当尝试确定负载均衡器的影响时,我经常发现让它在一个工作器上进行“负载平衡”很有用,而不是通过直接连接到工作器来完全绕过负载均衡器。

只有当负载均衡器按预期与单个工作者一起工作时,正如@user1279647 提到的,您可以通过与多个工作者一起测试来确定是否需要粘性会话。

相关内容