我问这个问题首先在 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/