Amazon Elastic Load Balancer未关闭与服务器的连接

时间:2017-04-11 15:56:50

标签: apache amazon-web-services amazon-elb ffserver

我有一个 EC2 实例, Apache 作为反向代理, ffserver 作为流媒体服务器。 EC2 实例前面有一个 ELB (经典)作为SSL终止点。

Apache 配置相当简单:

<Location "/mp3/">
    ProxyPass http://127.0.0.1:8081/ DisableReuse=On KeepAlive=Off
    ProxyPassReverse http://127.0.0.1:8081/
    SetEnv force-proxy-request-1.0.1
    SetEnv proxy-nokeepalive 1
</Location>

ffserver 用于通过Internet流式传输实时音频。在 ffserver的设置中,有一个 MaxBandwidth 选项(默认为1000)。当连接未正确关闭时,此设置将成为问题。 ffserver 开始响应“503服务器太忙”而不是流的内容。

如果我直接连接到服务器(路上没有 ELB ),一切正常。如果我通过 ELB 连接,当我在客户端关闭它时,连接将不会关闭(例如关闭浏览器的选项卡)。

我使用以下命令检查当前连接:

watch -n 2 'netstat -napt | grep 8081'

所有连接永远保持在ESTABLISHED状态(至少30分钟)。 ELB 的默认空闲超时为60.这表示有人正在从 ffserver 接收流(连接处于活动状态)。

编辑:将Classic Load Balancer更改为Application Load Balancer似乎解决了这个问题。我不知道如何解释这种行为。期待AWS社区的回答 - AWS Forums

2 个答案:

答案 0 :(得分:6)

OP与他的编辑共享时,可以通过更改负载均衡器类型来解决连接未关闭的问题。这个答案集中在为什么这种变化会产生如此影响?


经典负载均衡器(ELB)中似乎存在问题。我发现以下帖子中的问题非常相似;

问题似乎是由于ELB无法检测到客户端从连接断开而引起的。尤其是当后端定期提供某种数据时,例如实时音频流,心跳等。

似乎没有a way to disable the keep-alive setting of load balancers,但是,以某种方式,只有ELB才会出现此问题。

我找不到在ELBALB之间造成这种行为差异的确切功能。我认为原因可能是由于

由于上述改进,并且使用灵活得多,我认为使用Application Load Balancer(ALB)时该问题得以解决。

检查here,以了解ELBALBNLB之间的区别


ps。 AWS支持论坛非常糟糕,所有好的支持和技巧都被充作付费工具,并存储在它们及其高级客户之间的PM中。

答案 1 :(得分:0)

我知道这是一个旧线程,但是最近我遇到了同样的问题,解决方案是切换到ALB。之后可以正常工作。