新实例启动时来自负载均衡器的 403 错误

Posted

技术标签:

【中文标题】新实例启动时来自负载均衡器的 403 错误【英文标题】:403 errors from load balancer while new instances are booting 【发布时间】:2013-12-18 10:56:52 【问题描述】:

我有一个在弹性豆茎上运行的 RoR 应用程序。一段时间以来,我偶尔会看到来自乘客的 403 错误。大多数时候只有 1 个服务器在运行,但在白天的繁忙时段会增加到 3 或 4 个实例。

会话粘性未开启

我注意到当一个新服务器启动时,ELB 会在捆绑安装完成之前向它发送请求。

如果我 ssh 到新启动的服务器,我可以在 /var/app/current/ 中看到该应用程序尚未安装,如果我运行 top,它看起来像 bundler 正在运行并使用 cc1 等编译东西。 /var/app/support/log/passenger.log 显示正在接收对我的 rails 应用程序中有效 url 的请求并以 404 响应。这不足为奇,因为该应用程序还没有出现

5-10 分钟后,所有编译完成,应用文件出现在 /var/app/current 中,一切正常。

这对我来说似乎不太正确。如何设置 ELB/我的 rails 应用程序,以便 ELB 可以判断何时准备好接收请求?

【问题讨论】:

【参考方案1】:

我找到了答案。没有设置应用程序运行状况检查 url。在这种情况下,ELB 会 ping 实例以查看它是否健康,即它检查它是否已启动,而不是检查 rails 是否启动并运行。将运行状况检查 url 设置为“/login/”为我修复了它,因为这会给出一个 404,直到 rails 正在运行,然后是 200。

Elastic beanstalk 需要 2 次正确响应才能认为实例是健康的。它每 5 分钟检查一次实例。这意味着实例可能需要一段时间才能开始服务请求。即它需要启动时间 + 等待来自 elb 的下一次轮询 + 5 分钟才能看到任何实际流量

【讨论】:

谢谢 - 这是一个很大的帮助。

以上是关于新实例启动时来自负载均衡器的 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS 负载均衡器返回 403 响应?

重新部署后如何使用 Elastic Beanstalk 处理经典负载均衡器

Apache配置负载均衡-实例

更换ec2实例后,负载均衡器需要很长时间才能建立连接

EC2 上的负载均衡器 + 自动缩放 + Mysql

应用程序负载均衡器在自动缩放组打开新实例之前不会保留请求