这可能是不可能的问题。我什么都试过了。我觉得某个地方的总机台上有一个人,正在转动他的 mustache 。
问题:
我让 Amazon EC2 运行应用程序。当只有一个实例且没有负载均衡器时,它可以正常运行。
但是在我的生产环境中,我有两个相同的实例在一个负载均衡器后面运行,并且在执行某些任务时,例如生成 PDF 并将其附加到电子邮件的功能,什么都没有发生,并且在使用 Google 开发人员工具和网络时选项卡一旦超时命中,我会收到错误“504 Gateway Timeout”(我将其设置为 30 秒)。
我的数据库是外部的,位于 Amazon RDS 上。
我想.... instance-2 来执行任务。
这仅在使用负载平衡时发生,但在直接连接到我的两台服务器之一时不会发生。
负载均衡器设置:
更多想法:
话虽如此,我并没有使用 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/