通过具有自动缩放功能的 AWS Load Balancer 访问应用程序

通过具有自动缩放功能的 AWS Load Balancer 访问应用程序

我正在为计划从专用托管服务迁移到 AWS 的 Web 应用程序配置测试 AWS 架构。我现在的情况如下:

  • 一个 MySql RDS,我的应用程序数据位于其中。
  • 两个 EC2 实例。此实例具有应用程序源代码(以 PHP 编写)并且已配置为连接到 RDS。
  • 一个负载均衡器。我已将其设置为根据处理器使用情况在 2 到 10 个实例之间自动缩放,但我很可能会在应用程序上线后调整策略。

新的 EC2 实例将通过自定义映像启动,代码和 RDS 连接参数已准备好,我正在圣保罗地区工作。

除了一件事之外,一切都正常。如果我通过 ELB DNS 记录访问网站,我可以看到该网站,但我无法登录。当我输入用户凭据时什么也没有发生。(该网站基本上是一个管理面板,所以我必须登录才能查看其内容),但如果我通过单个实例 IP 或 DNS 记录访问,我可以正常登录并使用该应用程序。用户数据(用户和密码)存储在 RDS 中。

如果有人经历过类似的事情,我非常感谢您的帮助。提前谢谢您!

答案1

维护会话的通常方式是:

  1. 对用户进行身份验证。
  2. 向浏览器发送一个具有该会话唯一 ID 的 cookie。
  3. 在该浏览器的后续点击中查找会话 cookie。

会话 cookie 通常会在独立于 Web 服务器的位置进行存储和检索,例如单独的数据库服务器。这样,无论他们访问哪个 Web 服务器,他们都会获得相同的 cookie 和相同的会话。

会话 cookie 需要安全且对客户端唯一,因此某些应用程序会创建一个包含客户端 IP 的哈希值。如果是这种情况,则不同的 IP 看起来就像不同的会话。

您需要检查您的应用程序,看看是否存在这种情况。

或者,如果你确实需要将会话绑定到特定服务器(例如,应用程序在 Web 服务器上本地存储状态),则可以使用ELB 粘性会话将会话绑定到特定 Web 服务器。仅当您的应用实际上在每个 Web 服务器上本地存储状态时才需要这样做。

答案2

当您尝试通过 ELB 访问时,您是否会在应用程序上收到任何访问日志或任何类型的日志记录?如果没有,则更可能是 ELB 和 EC2 实例之间的 IP 转换问题。可能是特定于应用程序的,例如;您是否需要客户端的真实 IP 地址(如 X-Forwarded-For 标头)?也许是因为您在应用程序中使用的身份验证逻辑。

相关内容