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

标签 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 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 Forums

最佳答案

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

Classic Load Balancer ( ELB ) 中似乎存在问题。我发现以下帖子有非常相似的问题;

  • ELB - server keeps sending data to disconnected clients for hours
  • Is there a way to lower the LBS KeepAlive?
  • AWS ELB servlet client disconnection detection

  • 似乎问题源于 ELB无法检测到客户端从连接中断开。特别是当后端以定期方式提供某种数据时,例如实时音频流、心跳等。

    好像没有a way to disable the keep-alive setting of load balancers ,然而,不知何故,只有 ELB出现这个问题。

    我找不到在 ELB 之间造成这种行为差异的确切功能& ALB .我认为原因要么是由于;
  • Improved Health Checks in ALB ,和/或
  • 我们用户看不到的内部结构差异,以某种方式防止此问题发生在 ALB

  • 由于上述改进,我认为使用 Application Load Balancer ( ALB ) 时问题会解决,并且它更加灵活。

    查询 here有关 ELB 之间差异的更多信息, ALB , 和 NLB
    附: AWS 支持论坛很糟糕,所有好的支持和技巧都是付费的,并存储在他们和他们的高级客户之间的 PM 中。

    关于apache - Amazon Elastic Load Balancer 未关闭与服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350862/

    相关文章:

    maven - Spring Boot 和 ebextensions

    Apache %{REQUEST_URI} 无法正常工作

    php - 使用调制解调器的外部 XAMPP 访问

    amazon-web-services - Ansible - 自动化远程还是本地?

    amazon-web-services - 如何通过 AWS SNS 发送高优先级推送通知

    java - NLB 上的不健康目标

    python - Django + mod_wsgi。从 Apache 的 SetEnv 设置操作系统环境变量

    php - 如何通过密码动态保护文件(图像、视频、zip)不被公开并只允许成员访问?

    sql-server - AWS NVMe 存储 - 托管数据库

    amazon-web-services - 随机主机端口注册ELB到ECS服务