通过 HAProxy 推送 TCP RTMP 直播流

通过 HAProxy 推送 TCP RTMP 直播流

我需要一些帮助来理解这一点,也许我完全误解了这一点,走错了方向。 是否无法通过 HAProxy 将传入的 RTMP 流转发到接收服务器? 就像 - 不是访问 HAProxy 后面的服务器上可用的 RTMP 流,而是通过它将 RTMP 流发送到所述服务器。

我已经设置了一台服务器,它位于一个公共 IP 地址上,接收发送给它的 RTMP 直播流,另一台服务器位于一个有限访问网络中,与公共网络的直接访问隔离(两台服务器通过 VPN 互相看到对方)。与 RTMP 流相关的一切都运行良好 - 我可以向两者发送 RTMP 流(当然,当连接到同一个网络时),但我无法配置 HAProxy 将我的 RTMP 流从面向公众的服务器转发到与公共网络隔离的服务器。我尝试暂时禁用防火墙以检查这不是问题所在。

用于接收 RTMP 流的服务器是 NGINX,在放弃这个想法之前我尝试使用的 HAProxy 配置如下:

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     1024
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    log                     global
    option                  tcplog
    option                  dontlognull
    retries                 6
    timeout queue           1m
    timeout connect         15s
    timeout client          1m
    timeout server          30s
    timeout check           10s
    maxconn                 256

listen rtmp-1935
    bind :1935
    mode tcp
    balance roundrobin
    server stream01 10.100.10.80:2000
    server stream02 10.100.10.80:2000

对配置进行一些简单解释 - 其想法是让 RTMP 流到达 TCP 端口 1935 上的面向公众的服务器,然后通过 HAProxy 转发到另一台服务器,该服务器正在侦听 TCP 端口 2000 上的 RTMP 流。上述配置的结果是 HAProxy 会接收该流但不会转发任何内容。

以下是一个日志:

Apr 30 19:26:30 localhost haproxy[15972]: Proxy admin started.
Apr 30 19:27:58 localhost haproxy[15973]: 10.100.10.60:19398 [30/Apr/2018:19:27:58.164] admin admin/<STATS> 0/0/5 14887 LR 1/1/0/0/0 0/0
Apr 30 19:27:58 localhost haproxy[15973]: 10.100.10.60:19398 [30/Apr/2018:19:27:58.170] admin admin/<STATS> 0/0/361 14949 LR 1/1/0/0/0 0/0
Apr 30 19:27:58 localhost haproxy[15973]: 10.100.10.60:19398 [30/Apr/2018:19:27:58.531] admin admin/<NOSRV> -1/-1/288 212 SC 0/0/0/0/0 0/0
Apr 30 19:33:52 localhost haproxy[15973]: 10.100.10.60:19423 [30/Apr/2018:19:33:52.795] admin admin/<STATS> 0/0/6 15001 LR 1/1/0/0/0 0/0
Apr 30 19:33:53 localhost haproxy[15973]: 10.100.10.60:19423 [30/Apr/2018:19:33:52.801] admin admin/<NOSRV> -1/-1/333 212 SC 0/0/0/0/0 0/0
Apr 30 19:34:09 localhost haproxy[16211]: Proxy rtmp-1935 started.
Apr 30 19:34:09 localhost haproxy[16211]: Proxy admin started.
Apr 30 19:34:11 localhost haproxy[16212]: 10.100.10.60:19425 [30/Apr/2018:19:34:11.965] admin admin/<STATS> 0/0/7 14817 LR 1/1/0/0/0 0/0
Apr 30 19:34:12 localhost haproxy[16212]: 10.100.10.60:19425 [30/Apr/2018:19:34:11.973] admin admin/<NOSRV> -1/-1/355 212 SC 0/0/0/0/0 0/0

我已经放弃了这个想法,并恢复到只推送 RTMP 流,出于好奇,我想我会把这个问题留在这里,看看是否可以做到这一点。我不指望这个问题能得到回答。

答案1

这应该没问题。我已经这样做了。

根据您的日志,您的断开连接时的会话状态SC

S:TCP 会话被服务器意外中止,或者服务器明确拒绝。

C:代理正在等待服务器上建立连接。服务器最多可能已注意到连接尝试。

所有迹象都表明您的后端服务器根本不接受端口 2000 上的 TCP 连接。使用 telnet 或 nc 测试 HAProxy 的连接应该会返回Connection refused

答案2

我回去研究了这个问题。遇到了 HAProxy 无法连接到远程服务器的问题。这个发布的答案解决了我的问题:Haproxy 健康检查权限被拒绝。事实证明,这是因为我没有调整我的 SE Linux 以允许 HA Proxy 传出连接(这很奇怪,因为我可以发誓,上次测试时我曾短暂禁用过 SE Linux 和所有防火墙,但仍然失败了)。

相关内容