504网关超时 - 两个带负载均衡器的EC2实例

时间:2014-10-24 06:56:22

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

这可能是不可能的问题。我尝试了一切。我觉得在某个地方的交换机上有一个人,旋转着他的胡子。

问题:

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

但是在我的生产环境中,我有两个相同的实例在一个负载均衡器后面运行,在执行某些任务时,比如生成PDF并将其附加到电子邮件的功能,根本没有任何事情发生,并且在使用Google Developer工具时使用网络选项卡,我收到错误" 504网关超时"一旦超时命中(我将它设置为30秒)。

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

我认为....如果我可以强制客户端保持与他们登录的初始服务器的连接,这个问题就会得到解决,因为我的理解是504实例发生504网关超时-1尝试联系实例-2以执行任务。

只有在使用负载平衡时才会发生这种情况,但是直接连接到我的两台服务器之一时就不会发生这种情况。

负载均衡器设置:

  • 负载均衡器在我的注册器上有一个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,我也不相信SSL已正确设置。我怀疑的原因是,当我尝试键入https://app.myapplication.com时,我收到错误"(失败)net :: ERR_CONNECTION_CLOSED"在Google Developer Tools的“网络”标签中。但这应该是不适用的,因为即使使用常规HTTP我也遇到了问题。我可以稍后对SSL进行故障排除。

重申一下,我的问题是拥有" 504网关超时"使用某些功能时的问题,偶尔也会随机而不是加载页面(但很少)。只有在使用负载平衡时才会出现这个问题,但在直接连接到我的两个实例之一时就不会发生这种情况。

我不知道要问哪个问题,因为我已经跟踪了每个文档到T,双重和三重检查了网络上的所有建议而没有。

7 个答案:

答案 0 :(得分:11)

您使用的是哪种Web服务器?我在nginx和AWS负载平衡方面遇到了类似的问题。我补充道 keepalive_timeout 75s;到我的nginx配置文件中的http块,并且从那时起就没有看到问题。

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

AWS在其帮助页面AWS Load balancer troubleshooting

上建议使用此修补程序

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

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

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

这就是它的样子,所以我删除了第三条线,所有的齿轮再次开始转动。 :P

答案 3 :(得分:2)

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

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

这为我们解决了504错误。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

最可能的原因是空闲超时,默认值是60秒。 AWS ALB

答案 6 :(得分:0)

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

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