use*_*649 16 load-balancing amazon-ec2 http-status-code-504
这可能是不可能的问题.我已经尝试了一切.我觉得在某个地方的交换机上有一个人,旋转着他的胡子.
问题:
我有Amazon EC2运行应用程序.当只有一个实例且没有负载均衡器时,它可以正常运行.
但是在我的生产环境中,我有两个相同的实例在一个负载均衡器后面运行,在执行某些任务时,比如生成PDF并将其附加到电子邮件的功能,根本不会发生任何事情,以及在网络中使用Google Developer工具时选项卡一旦超时命中(我将其设置为30秒),我会收到错误"504 Gateway Timeout".
我的数据库是外部的,在Amazon RDS上.
我想....如果我可以强制客户端保持连接到他们登录的初始服务器,这个问题就会解决,因为我的理解是当实例1尝试联系到时,504网关超时正在发生instance-2执行任务.
只有在使用负载平衡时才会发生这种情况,但是直接连接到我的两台服务器之一时就不会发生这种情况.
负载均衡器设置:
更多想法:
话虽这么说,我不是用HTTPS测试,而是用普通的HTTP测试.即使我的证书提供商表示,我也不相信SSL已正确设置.我怀疑的原因是当我尝试键入https://app.myapplication.com时,我在Google Developer Tools的Network选项卡中收到错误"(failed)net :: ERR_CONNECTION_CLOSED".但这应该是不适用的,因为即使使用常规HTTP我也遇到了问题.我可以稍后对SSL进行故障排除.
重申一下,我的问题是在使用某些功能时遇到"504 Gateway Timeout"问题,但偶尔也会随机而不是加载页面(但很少).只有在使用负载平衡时才会出现这个问题,但是直接连接到我的两个实例之一时就不会发生这种问题.
我不知道要问哪个问题,因为我已经跟踪了每个文件到T,双重和三重检查了网络上的所有建议而没有.
Max*_*mus 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疑难解答中建议使用此修复程序
首先,ELB设置的空闲超时是多少?您可以在负载均衡器的"描述"选项卡的最底部找到它.您可以在ELB文档中阅读有关空闲超时的更多信息.默认值为60秒.您还应该考虑在Web服务器中设置或增加Keep-alive.如何操作取决于您使用的Web服务器.
其次,如果您认为这是由于客户端从一个实例切换到另一个实例,那么您应该在ELB中启用会话粘性.这将确保客户端始终由负载均衡器定向到同一后端实例.要启用此功能,请再次转到"描述"选项卡,然后单击"端口配置"部分中每个条目旁边的"编辑"链接.您可能希望选择"启用Load Balancer Generated Cookie Stickiness"选项,因为这将告诉ELB管理粘性的所有方面.
就我而言,事实证明负载均衡器没有问题。最终的解决方案是 Ubuntu 的主机文件,其中有一个莫名其妙的条目将流量从某个神秘 IP 路由到我的应用程序的主机名。因此,在创建 PDF 的过程中,PDF 生成器会重写路径以指向神秘服务器,因此会出现网关超时问题。我不知道为什么它偶尔会起作用而不是失败。
127.0.0.1 localhost
127.0.1.1 ubuntu-server
42.139.126.191 app.myapp.com
Run Code Online (Sandbox Code Playgroud)
这就是它的样子,所以我删除了第三条线,所有齿轮再次开始转动。:P
| 归档时间: |
|
| 查看次数: |
29412 次 |
| 最近记录: |