21

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

问题:

我让 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,两次和三次检查了整个网络上的所有建议,什么都没有。

4

7 回答 7

11

您使用的是什么网络服务器?我在 nginx 和 AWS 负载平衡方面遇到了非常相似的问题。我在我的 nginx 配置文件中添加 keepalive_timeout 75s; 了 http 块,从那以后就没有看到这个问题。

确保在添加并保存该行后重新启动 nginx(在 ubuntu 上sudo service nginx restart。在 redhat 上停止 nginx/path/to/nginx/executable -s stop然后/path/to/nginx/executable启动 nginx)

AWS 在其帮助页面AWS 负载均衡器故障排除中推荐了此修复程序

于 2014-12-31T22:55:33.037 回答
8

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

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

于 2014-10-24T14:46:56.457 回答
4

我们在 Amazon ELB 后面使用 Amazon EC2 实例,我们收到 504 GATEWAY_TIMEOUT 错误。我们在 Ubuntu Web 服务器上使用 Apache 和 PHP。

在我们的例子中,错误是由于服务器内存不足造成的。我们没有在 Apache 错误日志中看到“内存不足”。Apache 访问日志中有一个 504 行条目。我们通过查看 syslog 文件 ( /var/log/syslog ) 确认了“内存不足”并修复了内存问题。

这为我们解决了 504 错误。

于 2015-10-16T04:35:49.523 回答
3

就我而言,事实证明负载平衡器没有问题。最终的解决方案是 Ubuntu 的主机文件,其中有一个莫名其妙的条目将流量从某个神秘 IP 路由到我的应用程序的主机名。因此,在创建 PDF 的过程中,PDF 生成器会重新编写路径以指向神秘服务器,因此会出现网关超时问题。我不知道为什么它偶尔会工作而不是失败。

127.0.0.1 localhost
127.0.1.1 ubuntu-server
42.139.126.191 app.myapp.com

这就是它的样子,所以我去掉了第三条线,所有的齿轮又开始转动了。:P

于 2015-01-05T09:33:55.037 回答
1

空闲超时很可能是罪魁祸首,默认值为 60 秒。 AWS ALB

于 2018-12-24T16:43:24.707 回答
1

检查安全组设置。端口 80 可能被限制访问。

于 2017-11-05T07:02:34.030 回答
0

就我而言:我编辑了入站安全组规则。转到:

EC2-->安全组-->编辑相应安全组的入站规则并确保正确选择了源(对我来说选择任何解决问题的地方)

于 2021-02-24T10:49:17.093 回答