Websockets 和防火墙

Websockets 和防火墙

我问这个问题首先在 Stack Overflow 上,但后来我认为 Server Fault 可能是发布它的更好的地方。


我有两个 WebSocket 服务器,它们都运行在 80 和 443 以外的不同端口上。这两个服务器在防火墙后面运行,防火墙只打开了 80 和 443 端口。

WebSocket Server A:800 |
                       |-----|FireWall:80 & 443|-----> INTERNET
WebSocket Server B:801 |

我正在寻找一种方法,使我的客户端能够连接到 WebSocket 服务器,而不需要知道他们的端口,也不需要我为除 80 和 443 之外的任何其他端口打开防火墙。

因此,我在想,是否可以在防火墙和 WebSocket 服务器之间配置一个中间服务器(或代理服务器),以便当客户端www.mywebsite.com/a在端口 80 或 443 上请求(通过防火墙)时,中间服务器将客户端连接到 WebSocket 服务器 A。并且当客户端www.mywebsite.com/b在端口 80 或 443 上请求时,中间服务器将其连接到 WebSocket 服务器 B。这可能吗?如果可以,您是否知道有任何服务器实现了此功能?

换个角度来说(可能没什么不同),TCP 打洞以及我上面解释的方法?

答案1

看来您需要在防火墙和服务器之间添加反向代理。

通过使用websocket apache 模块您应该能够通过反向代理将 websocket 请求转发到您的服务器。

答案2

我建议修改代理服务器Apache 2.4.5 及以上版本中提供的模块。它允许您从 URL 中继到任意端口上的另一个 websocket 服务器。

例如,举个例子:

ProxyPass /ws1/  ws://websocketserverA:800/
ProxyPass /ws2/  ws://websocketserverB:801/

相关内容