我有一个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 server too busy
而不是流的内容。
如果我直接连接到服务器(路上没有ELB )一切正常。如果我通过ELB连接,当我在客户端关闭它时连接不会关闭(例如关闭浏览器的选项卡)。
我使用以下命令检查当前连接:
watch -n 2 'netstat -napt | grep 8081'
所有连接都永远保持在 ESTABLISHED 状态(至少 30 分钟)。ELB的默认空闲超时为60。这意味着有人正在从ffserver接收流(连接处于活动状态)。
编辑:看起来将 Classic Load Balancer 更改为 Application Load Balancer 解决了这个问题。我不知道如何解释这种行为。期待 AWS 社区的回答 - AWS 论坛