【问题标题】:Laravel app behind AWS ELB not working as expectedAWS ELB 背后的 Laravel 应用程序无法按预期工作
【发布时间】:2016-09-20 23:50:09
【问题描述】:

我已经卡了两天了,这是我的问题:

我正在查看 laravel 应用程序的奇怪行为,该应用程序不是我开发的,但我有责任弄清楚发生了什么。 我在 AWS ELB 后面设置了一个 laravel 应用程序,会话由 memcached (AWS elastic cache) 处理。有时一切都很好,然后发生了一些奇怪的事情:

当用户登录、在应用程序中导航、执行操作时,它会以某种方式向他显示登录页面。问题是,当我从地址栏中删除 /login 并将其替换为 /homepage 时,经过一番尝试,它通过了;它显示没有登录就无法访问的主页。这表明用户没有注销并且某些设置不正确。

在对此进行调查之后,这是我能制定的最佳解释: 在Laravel 中,有处理身份验证相关任务的 Catalyst/Sentry 包。当用户登录时,它会保存其 IP(在本例中为 ELB'ip),并且由于 elb's IP 正在更改,当用户在 ELB IP 更改发生后单击链接时,应用程序认为请求无效(我只是在大声思考)并向用户显示登录页面。

这是一个常见的问题!?如果是这样,我该如何解决这个问题!?

非常感谢任何帮助。非常感谢。

【问题讨论】:

  • 一个天真的 - 并且可能错误,或者至少不是最佳的 - 解决方案将在 ELB 中启用 sticky sessions,这可能会隐藏问题,直到您找到并真正修复它。 ELB 将 X-Forwarded-For 标头设置为客户端 IP,因此如果您的理论是正确的,那么应该有一个解决方案,但 Laravel 超出了我的专业范围。我怀疑您不是第一个遇到这种情况的人,可能有更正确的解决方案。

标签: amazon-web-services laravel-4 memcached amazon-elb cartalyst-sentry


【解决方案1】:

这看起来像是memcached 问题。 sentry 用来识别您是否是有效用户的东西称为persist code。如果我的理由是正确的,那么您的 persist code 会在没有明确原因的情况下更改(memcached 行为不端除外)。改用redis,效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 2020-03-02
    • 2018-05-14
    • 1970-01-01
    • 2015-06-04
    • 2021-11-24
    • 2017-08-27
    • 2015-10-17
    相关资源
    最近更新 更多