3

我有两个 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. 当客户端在端口 80 或 443 上请求时www.mywebsite.com/b,中间服务器将他连接到 WebSocket 服务器 B。这可能吗?如果是这样,您可能知道是否有任何服务器实现了此功能?

换一种说法(可能差别不大),TCP打孔器和我上面解释的方法有什么区别?

4

2 回答 2

3

这称为“WebSockets 反向代理”。您将需要防火墙和 WebSocket 服务器之间的另一个逻辑或物理节点。您可能在同一系统上运行所有三个节点,这就是我提到“逻辑”的原因。

这个领域正在迅速变化,解决方案还相当不成熟。对于您的情况,最好的选择可能是使用HAProxy for WebSocket reverse proxy。搜索“WebSocket 反向代理”以获取更多信息。这篇文章有点老了,但应该给你一个合理的选项概述。

更新:看起来 WebSocket 代理支持昨天刚刚登陆 Nginx:新闻稿提交示例

于 2013-02-18T16:55:40.457 回答
1

感谢@kanaka 在他的回答中提供的链接,我设法配置 HAProxy 以根据 URI 重定向我的请求。所以这就是我所做的:

一旦你make有了 HAProxy,你就可以在usr/local/sbin. 该脚本使用-f配置文件的标志运行。查看/etc/并以防万一您没有任何haproxy.cfg简单mkdir -p /etc/haproxy然后vi /etc/haproxy.cfg粘贴您的配置。此处描述了 1.5 版的配置文件,其中包含可以使用的所有参数。这是我的haproxy.cfg文件的样子:

global
    log  127.0.0.1 local0
    log  127.0.0.1  local1 notice
    maxconn  4096
    uid  99
    gid  99
    daemon

defaults
    log global
    mode  http
    option  httplog
    option  dontlognull
    retries  3
    option  redispatch
    option  http-server-close
    maxconn  2000
    contimeout  5000
    clitimeout  50000
    srvtimeout  50000

frontend public
    bind *:80
    acl is_websocket1 path_beg -i /a # if the path starts with /a
    acl is_websocket2 path_beg -i /b # if the path starts with /b
    use_backend ws1 if is_websocket1
    use_backend ws2 if is_websocket2
    default_backend www

backend www
    timeout server 30s
    server www1 127.0.0.1:8001 # the port we have our webserver running on

backend ws1
    timeout server 600s
    server ws1 127.0.0.1:800 # the port we have our websocket server 1 running on

backend ws2
    timeout server 600s
    server ws2 127.0.0.1:801 # the port we have our websocket server 2 running on
于 2013-02-20T08:31:53.133 回答