Proxy WebSocket服务器和防火墙

Proxy WebSocket服务器和防火墙,proxy,websocket,firewall,url-redirection,Proxy,Websocket,Firewall,Url Redirection,我有两个WebSocket服务器,都运行在80和443之外的不同端口上。这两台服务器运行在防火墙后面,防火墙只打开端口80和443 WebSocket Server A:800 | |-----|FireWall:80 & 443|-----> INTERNET WebSocket Server B:801 | 我正在寻找的是一种方法,使我的客户端能够连接到WebSocket服务器,而无需知道它们的端口,也无需我打开任何其他端口(而不

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

WebSocket Server A:800 |
                       |-----|FireWall:80 & 443|-----> INTERNET
WebSocket Server B:801 |
我正在寻找的是一种方法,使我的客户端能够连接到WebSocket服务器,而无需知道它们的端口,也无需我打开任何其他端口(而不是80和443)的防火墙

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

另一方面(可能没有太大不同),与我上面解释的方法有什么区别?

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

这一领域正在迅速变化,解决方案也相当不成熟。对于您的案例,最好的选择可能是使用。有关详细信息,请搜索“WebSocket反向代理”。有点老了,但应该给你一个合理的选择概述


更新:看起来WebSocket代理支持昨天刚登陆Nginx:,

多亏了他的回答中提供的@kanaka,我成功地配置了HAProxy以基于URI重定向我的请求。这就是我所做的:

一旦你
make
HAProxy,你可以在
usr/local/sbin
下找到HAProxy。脚本使用配置文件的
-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

@kanaka,Kaazing呢?他们有websocket反向代理吗?@Pacerier不确定(有一阵子没看过了)。但是如果你发现了,请发回这里。如果你在防火墙后控制一切,这绝对是可能的。