Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 504网关超时-两个带负载平衡器的EC2实例_Amazon Ec2_Load Balancing_Http Status Code 504 - Fatal编程技术网

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

Amazon ec2 504网关超时-两个带负载平衡器的EC2实例,amazon-ec2,load-balancing,http-status-code-504,Amazon Ec2,Load Balancing,Http Status Code 504,这可能是不可能的问题。我什么都试过了。我感觉好像有个人在某个地方的总机旁扭着胡子 问题: 我让AmazonEC2运行一个应用程序。当只有一个实例而没有负载平衡器时,它可以正常工作 但在我的生产环境中,我有两个相同的实例运行在一个负载平衡器后面,当执行某些任务时,例如生成PDF并将其附加到电子邮件的功能时,根本不会发生任何事情,当使用Google Developer工具和网络选项卡时,一旦超时到达,我就会收到错误“504网关超时”(我把它设置为30秒) 我的数据库是外部的,在Amazon RDS上

这可能是不可能的问题。我什么都试过了。我感觉好像有个人在某个地方的总机旁扭着胡子

问题:

我让AmazonEC2运行一个应用程序。当只有一个实例而没有负载平衡器时,它可以正常工作

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

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

我认为……如果我可以强制客户机保持与他们登录的初始服务器的连接,这个问题就会得到解决,因为据我所知,当实例1试图联系实例2执行任务时,504网关超时正在发生

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

负载平衡器设置:

  • 负载平衡器在我的注册器上有一个CRECORD,以便app.myapplication.com指向myloadbalancerdnsame.elb.amazonaws.com
  • 负载平衡器有2个正常的实例,每个实例位于同一区域,但它们位于不同的可用性区域
  • 负载平衡器使用与实例相同的安全组(允许端口22、80和443上的所有IP)
  • 负载平衡器已启用跨区域负载平衡
  • CORS(在AmazonS3中)能够从*到*获取、发布、放置、删除(我不知道这与我的实例有什么关联,但无论如何我按照说明做了)
  • 负载平衡器的侦听器配置如下:
    • 负载平衡器协议:HTTP负载平衡器端口:80实例协议:HTTP实例端口:80
    • 负载平衡器协议:HTTPS负载平衡器端口:443实例协议:HTTP实例端口:80(根据我的证书提供程序正确选择密码,SSL字段100%肯定正确)
还有一些想法:

话虽如此,我不是在测试HTTPS,而是在测试普通HTTP。尽管我的证书提供商说SSL设置正确,但我不确信SSL设置正确。我怀疑的原因是,当我尝试输入时,我发现错误“(失败)net::ERR\u CONNECTION\u CLOSED”在Google开发者工具中,在网络选项卡中。但这应该不适用,因为即使使用常规HTTP,我也会遇到问题。我可以稍后对SSL进行故障排除

因此,重申一下,我的问题是在使用某些函数时出现“504网关超时”问题,但有时也会随机加载页面(但很少)。此504问题仅在使用负载平衡时发生,但在直接连接到我的两个实例之一时决不会发生


我不知道该问哪一个问题,因为我已经跟踪了所有的文档,仔细检查了网络上所有的建议,什么都没有。

首先,您的ELB的空闲超时设置为多少?您可以在“说明”的最底部找到它您的负载均衡器选项卡。您可以阅读更多关于空闲超时的信息。默认值是60秒。您还应该考虑在Web服务器中设置或增加保持活力。这将取决于您使用的Web服务器。


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

您使用的是什么web服务器?我在nginx和AWS负载平衡方面遇到了非常类似的问题。我添加了
keepalive\u timeout 75s;
到我的nginx配置文件中的http块,之后就没有看到问题

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


这个补丁是AWS在他们的帮助页面上推荐的

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

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

这就是它看起来的样子,所以我删除了第三行,所有的齿轮再次开始转动。:p

我们在Amazon ELB后面使用Amazon EC2实例,我们得到504个网关超时错误。我们在Ubuntu web服务器上使用Apache和PHP

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


这为我们解决了504错误。

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

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

在我的例子中:我编辑了入站安全组规则。转到:

EC2-->安全组-->编辑Co的入站规则