【问题标题】:Using Laravel behind a load balancer在负载均衡器后面使用 Laravel
【发布时间】:2013-06-12 20:13:23
【问题描述】:

我已经在 Laravel 4 网站上工作了一段时间,公司只是把它放在负载均衡器后面。现在,当我尝试登录时,它基本上只是刷新页面。我尝试在https://github.com/fideloper/proxy 使用 fideloper 的代理包,但没有看到任何变化。我什至通过代理 => '*' 打开它以允许所有 IP 地址。我需要一些帮助来了解需要做什么才能让 Laravel 在负载均衡器后面工作,尤其是在会话方面。请注意,我使用的是数据库 Laravel 会话驱动程序。

负载平衡器是 KEMP LM-3600。

【问题讨论】:

  • 哪个负载均衡器?有很多
  • 我正在与网络人员核实,我会尽快更新。
  • 他们有一台 KEMP LM-3600。

标签: php session laravel load-balancing


【解决方案1】:

感谢大家提供的有用信息。经过进一步测试,我发现这不起作用的原因是因为我们强制 https 通过负载均衡器,但在不通过负载均衡器时允许 http。登录表单实际上是发布到 http 而不是 https。这允许表单发布,但会话数据从未返回给客户端。将表单更改为发布到 https 解决了这个问题。

【讨论】:

  • 我不知道这是否是 Laravel 4.1 的更新,但设置受信任的代理现在应该可以工作了。 Laravel 应该正确地创建重定向和 URL。该表单提交 URL 是否硬编码为“http”?我已经在负载平衡代理后面测试了 laravel 4.1,它在正确设置受信任的代理时正确运行
【解决方案2】:

我们在我工作的地方使用负载平衡器,并且在访问 cPanel 仪表板时遇到了类似的问题,每次我尝试访问某个部分时页面都会重新加载,并在我的 IP 地址更改为它们时注销我。解决方案是找到 cPanel 正在使用的端口并配置负载平衡器以将该端口绑定到一个 WAN。抱歉,我不熟悉 laravel,如果它只使用端口 80,那么这可能不是一个解决方案。

【讨论】:

  • 我们使用的是 https,因此负载均衡器正在接受 443 上的连接。您是如何知道 cPanel 正在使用哪个端口的?
  • @Dalyn en.wikipedia.org/wiki/CPanel "cPanel 通常在 2082 端口访问"
  • @Dalyn 我没有看过 KEMP LM-3600,但我知道使用我们的可以通过内部网络上的 MAC 地址绑定设备。如果您的站点是服务器上唯一的站点,并且它与平衡器不在不同的子网中,那么您可以要求“网络人员”将您的服务器绑定到一个 WAN 并照常工作。
【解决方案3】:

请注意,Laravel 4 中的会话处理在所有不使用 PHP 提供的会话保存处理程序(如“files”、“memcached”等)的自编码处理程序中使用Symfony 2 code, which lacks proper session locking

当在具有并行请求(如 Ajax)的 Web 应用程序中使用时,这会产生错误,但这应该与任何负载平衡器无关。

你真的应该做更多的调查。 HTTP 负载平衡器确实对信息流有一些影响,但对 PHP 应用程序的唯一影响是浏览网站的单个用户会随机将请求发送到任何一个连接的服务器,而不是总是发送到相同的服务器。

您是否还使用任何花哨的数据库设置,例如主从复制?这将更有可能影响会话,如果仅在主设备上进行写入,则仅在从设备上进行读取,并且该从设备在主设备之后更新最后的写操作。不建议将此类配置用作会话存储。我宁愿使用 Memcached。 PHP 会话保存处理程序也确实实现了正确的锁定...

使用 fideloper 的代理没有意义。负载均衡器应该对 Web 服务器透明,即它不应该充当反向代理,除非配置为这样做。

【讨论】:

  • 我已将 Laravel 4 会话驱动程序切换回本机。您是说除非我使用本机会话驱动程序,否则 AJAX 请求将成为问题?我们看到的问题是当我点击登录时,它基本上只是发布到页面。我什至没有收到错误提示我没有填写登录字段。该站点在不通过负载平衡器时可以正常工作。每加载 1-10 个页面,我们还会在浏览器中收到一条连接中断消息。数据库没有什么花哨的。 Windows Server 2008 运行 IIS 和 SQL Server,PHP 配置并运行 IIS。
  • 好吧,基于本机文件的会话将无法在负载平衡环境中工作,除非您根据会话 cookie 使负载平衡器具有粘性。如果会话在机器之间切换,则包含会话数据的文件不会。
【解决方案4】:

使用共享资源来存储会话数据。 File 和 memcached 肯定行不通。数据库应该没问题。这就是我在具有公共数据库的负载平衡设置中使用的。

【讨论】:

  • 您是否必须在负载均衡器上进行任何其他配置才能使其正常工作?您在设置中使用 Laravel 吗?
  • 是的,使用 Laravel。两个 Web 头都访问一个存储会话数据的公共数据库。唯一重要的配置点是使用数据库会话驱动程序。
【解决方案5】:

我已经使用TrustedProxy 有一段时间了,它工作正常。

负载平衡器的主要问题是代理路由。下一个来自自述文件和我正在寻找的内容。

如果您的网站位于负载平衡器、网关缓存或其他 “反向代理”,每个网络请求都有可能出现 总是来自那个代理,而不是客户端实际制作 您网站上的请求。

为了解决这个问题,这个包允许你利用 Symfony 的 代理知识。有关以下主题的更多说明,请参见下文 “受信任的代理”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2015-07-11
    • 2017-05-25
    • 2020-07-23
    • 2016-04-01
    相关资源
    最近更新 更多