amazon-ec2 - 504 Gateway Timeout - 两个带有负载均衡器的 EC2 实例

标签 amazon-ec2 load-balancing http-status-code-504

这可能是不可能的问题。我什么都试过了。我觉得某个地方的总机台上有一个人,正在转动他的 mustache 。

问题:

我让 Amazon EC2 运行应用程序。当只有一个实例且没有负载均衡器时,它可以正常运行。

但是在我的生产环境中,我有两个相同的实例在一个负载均衡器后面运行,并且在执行某些任务时,例如生成 PDF 并将其附加到电子邮件的功能,什么都没有发生,并且在使用 Google 开发人员工具和网络时选项卡一旦超时命中,我会收到错误“504 Gateway Timeout”(我将其设置为 30 秒)。

我的数据库是外部的,位于 Amazon RDS 上。

我想.... instance-2 来执行任务。

这仅在使用负载平衡时发生,但在直接连接到我的两台服务器之一时不会发生。

负载均衡器设置:

  • 负载均衡器在我的注册器上有一个 CRECORD,因此 app.myapplication.com 指向 myloadbalancerDNSname.elb.amazonaws.com
  • 负载均衡器有 2 个运行良好的实例,每个实例位于同一区域,但它们位于不同的可用区。
  • 负载均衡器使用与实例相同的安全组(允许端口 22、80 和 443 上的所有 IP)
  • 负载均衡器已开启跨区域负载均衡。
  • CORS(在 Amazon S3 中)已启用从 * 到 * 的 GET、POST、PUT、DELETE(我不知道这与我的实例有何关联,但无论如何我按照说明进行了操作)
  • 负载均衡器的监听器配置如下:
  • 负载均衡器协议(protocol):HTTP 负载均衡器端口:80 实例协议(protocol):HTTP 实例端口:80
  • 负载均衡器协议(protocol):HTTPS 负载均衡器端口:443 实例协议(protocol):HTTP 实例端口:80(根据我的证书提供者正确选择了密码,并且 SSL 字段 100% 肯定正确)

  • 更多想法:

    话虽如此,我并没有使用 HTTPS 进行测试,而是使用普通的 HTTP 进行测试。我不相信 SSL 设置正确,即使我的证书提供商说它是正确的。我怀疑的原因是当我尝试键入 https://app.myapplication.com 时我在 Google Developer Tools 的 Network 标签中收到错误“(failed) net::ERR_CONNECTION_CLOSED”。但这应该是不适用的,因为即使使用常规 HTTP,我也遇到了问题。我可以稍后对 SSL 进行故障排除。

    所以重申一下,我的问题是在使用某些功能时出现“504 Gateway Timeout”问题,但偶尔也会随机而不是加载页面(但很少)。此 504 问题仅在使用负载平衡时发生,但在直接连接到我的两个实例之一时不会发生。

    我不知道要问哪个问题,因为我已经将每个文档都跟踪到了 T,两次和三次检查了整个网络上的所有建议,什么都没有。

    最佳答案

    首先,您的 ELB 的空闲超时设置为多少?您可以在负载均衡器的“描述”选项卡的最底部找到它。您可以阅读有关空闲超时的更多信息 here in the ELB documentation .默认值为 60 秒。您还应该考虑在 Web 服务器中设置或增加 Keep-alive。你如何做到这一点取决于你使用的网络服务器。

    其次,如果您认为这是由于客户端从一个实例切换到另一个实例,那么您应该启用 session stickiness在 ELB 中。这将确保客户端始终被负载均衡器定向到相同的后端实例。要启用此功能,请再次转到“描述”选项卡,然后单击“端口配置”部分中每个条目旁边的“编辑”链接。您可能希望选择“启用负载均衡器生成的 Cookie 粘性”选项,因为这将告诉 ELB 管理粘性的所有方面。

    关于amazon-ec2 - 504 Gateway Timeout - 两个带有负载均衡器的 EC2 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26542936/

    相关文章:

    python - 使用堆栈名称标记 ec2 实例

    apache - 如何将我在 EC2 中的网站重定向到我的域

    coldfusion - 是否需要更换 CFLogin 还是我遗漏了什么?

    Apache HTTP/mod_jk 仅在一名工作人员处于事件状态时工作

    php - 处理多个主机上的 PHP 站点 session 的最佳方法是什么?

    amazon-web-services - 为什么 AWS ELB(弹性负载均衡器)有时会立即返回 504(网关超时)?

    perl - 分析超时的 Perl CGI 脚本

    apache - 为什么 <myWebsite.com> :8080 works while <mywebsite. com> 不适用于在 Ec2 上运行的 tomcat 服务器?

    angular - 504 从服务器读取响应超时

    amazon-web-services - AWS 中是否有任何服务可以在特定时间启动和停止实例?