我在多台服务器上使用开源流媒体服务器 Red5。这些服务器在堡垒主机后面运行。
全世界都知道这些遗址
http://site1.mydomain.com
http://site2.mydomain.com
http://site3.mydomain.com
http://site4.mydomain.com
要访问前端服务器,请使用 Apache 反向代理。
我也使用 rtmp 在每个网站上进行视频流传输。
为了能够访问流媒体服务器,我在 HTML 页面中嵌入了以下 JavaScript 代码:
<embed .....
var="rtmp://site1.my_domain.com"
>
问题是网站有很多
site1.mydomain.com site2.mydomain.com site3.mydomain.com site4.mydomain.com
每个服务器都位于单独的物理服务器上。这四个服务器都有自己的 Red5 安装,每个服务器的前端都是一个公共堡垒主机。
如果我在每个子域的不同端口上运行 rtmp
我如何确保这样的请求
rtmp://site1.mydomain.com
rtmp://site2.mydomain.com
从前端服务器转到各自的服务器。在这种情况下我需要处理什么?
我立即想到了 IPTABLES,但是当有人在互联网上请求时,客户端浏览器
rtmp://site1.mydomain.com
我如何确保此 rtmp 请求映射到不同于 1935 的端口,因为还有其他三个流媒体服务器也要响应它们各自的请求?
答案1
如果您的用户仅通过代码联系 rtmp 服务器(而不是手动输入 URL,您只需在 URL 本身中指定正确的端口号即可。
例如:
rtmp://site1.mydomain.com:1935
rtmp://site2.mydomain.com:1936
rtmp://site3.mydomain.com:1937
rtmp://site4.mydomain.com:1938
尝试通过 iptables 进行这样的重定向并非易事。iptables 处理的 TCP/IP 标头不包含为到达标头中包含的 IP 地址而执行的 DNS 查找的任何痕迹。
根据 RTMP 的协议格式(我不熟悉),你可能能够像l7 过滤器项目创建检查有效负载的过滤规则。但是,请注意,它不是标准 Linux 内核的一部分,需要您自己进行修补和开发。