如何通过中介服务器转发websocket通信?

我试图通过中间服务器(托pipe在AWS EC2实例上)连接websocket服务器(linux机器)和客户机(web浏览器)。 EC2实例提供websocket服务器和客户端可以引用的公有IP。

我的客户端连接到ws://<SERVER>:<PORT> ,其中SERVER是我的EC2实例的地址, PORT是我为端口转发打开的任意端口(例如9111 )。

在websocket服务器上,我正在运行以下命令:

  /usr/bin/ssh -f -N -i $KEY -l ubuntu \ -R $PORT:127.0.0.1:9090 \ -L 9090:$SERVER:$PORT \ $SERVER 

其中$KEY是EC2的私钥, 9090是我的websocket服务器使用的端口。 我configuration了我的EC2实例的ssh守护进程来启用网关端口,并且端口转发工作正常。

当我尝试启动我的websocket服务器时,问题来了 – 我得到一个Address already in use错误,因为显然我不能启动我转发的端口上的websocket服务器。 这不是一个相当标准的事情吗? 我究竟做错了什么?

谢谢!

SSH的“-L 9090”选项在端口9090上打开一个监听器,与您的websocket服务器冲突。 -R选项应该足够了,并且转发连接将是双向的,您不需要使用-Lbuild立“反向路由”。

您可能需要启用EC2 SSH守护进程上的GatewayPorts选项,以允许使用-R来设置端口,以接受来自任何IP的连接,以及任何防火墙更改。