这可能是不可能的问题。我什么都试过了。我觉得某个地方的总机台上有一个人,正在转动他的小胡子。
问题:
我让 Amazon EC2 运行应用程序。当只有一个实例且没有负载均衡器时,它可以正常运行。
但是在我的生产环境中,我有两个相同的实例在一个负载均衡器后面运行,并且在执行某些任务时,例如生成 PDF 并将其附加到电子邮件的功能,什么都没有发生,并且在使用 Google 开发人员工具和网络时选项卡一旦超时命中,我会收到错误“504 Gateway Timeout”(我将其设置为 30 秒)。
我的数据库是外部的,位于 Amazon RDS 上。
我想.... instance-2 来执行任务。
这仅在使用负载平衡时发生,但在直接连接到我的两台服务器之一时不会发生。
负载均衡器设置:
- 负载均衡器在我的 Registrar 上有一个 CRECORD,因此 app.myapplication.com 指向 myloadbalancerDNSname.elb.amazonaws.com
- 负载均衡器有 2 个运行状况良好的实例,每个实例位于同一区域,但它们位于不同的可用区。
- 负载均衡器使用与实例相同的安全组(允许端口 22、80 和 443 上的所有 IP)
- 负载均衡器已开启跨区域负载均衡。
- CORS(在 Amazon S3 中)已启用从 * 到 * 的 GET、POST、PUT、DELETE(我不知道这与我的实例有何关联,但无论如何我按照说明进行了操作)
- 负载均衡器的监听器配置如下:
- 负载均衡器协议:HTTP 负载均衡器端口:80 实例协议:HTTP 实例端口:80
- 负载均衡器协议:HTTPS 负载均衡器端口:443 实例协议:HTTP 实例端口:80(根据我的证书提供者正确选择的密码,并且 SSL 字段 100% 肯定正确)
还有一些想法:
话虽如此,我并没有使用 HTTPS 进行测试,而是使用普通的 HTTP 进行测试。我不相信 SSL 设置正确,即使我的证书提供商说它是正确的。我怀疑的原因是,当我尝试输入https://app.myapplication.com时,我在 Google 开发人员工具的“网络”选项卡中收到错误“(失败)net::ERR_CONNECTION_CLOSED”。但这应该是不适用的,因为即使使用常规 HTTP,我也遇到了问题。我可以稍后对 SSL 进行故障排除。
所以重申一下,我的问题是在使用某些功能时遇到“504 Gateway Timeout”问题,但偶尔也会随机而不是加载页面(但很少)。此 504 问题仅在使用负载平衡时发生,但在直接连接到我的两个实例之一时不会发生。
我不知道要问哪个问题,因为我已经将每个文档都跟踪到了 T,两次和三次检查了整个网络上的所有建议,什么都没有。