我需要一些帮助来理解这一点,也许我完全误解了这一点,走错了方向。 是否无法通过 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 和所有防火墙,但仍然失败了)。