NodeJS - 带有websocket传输的SSL上的SocketIO

时间:2013-08-08 09:47:43

标签: python node.js ssl websocket socket.io

我有一个NodeJS-socketIO服务器,它的客户端可以监听JS,PHP和蟒蛇。当通过普通的HTTP / WS通道进行通信时,它就像一个魅力。

现在,当我尝试保护此通信时,websocket传输不再起作用。它回归到xhr-polling(长轮询)运输。 Xhr-polling仍适用于JS客户端,但不适用于纯粹依赖于套接字传输的python。

我尝试的事情:

  1. 在节点上,使用 https (使用商业证书)代替http - 适用于通过节点提供服务但不适用于socketIO
  2. 代理商通过 HAProxy(1.15-dev19)。从HTTPS(HAProxy)到HTTP(节点)。无法使Websocket传输工作,并且在JS上回退到xhr-polling Python在握手时获得 502
  3. 代理商通过 STunnel (适用于HTTPS) - > HAProxy(Websocket代理) - >节点(SocketIO) - 这也不起作用。 Python客户端在握手时仍然获得502。
  4. 通过Stunnel的代理(HTTPS) - >节点(SocketIO) - 这也不起作用。不确定STunnel是否支持websocket代理
  5. node-http-proxy :在websocket上抛出500( 发生错误:{“code”:“ECONNRESET”} )并回到xhr-polling
  6. 我确定它是一个常见的用例,并且存在一个解决方案。非常感谢任何帮助。

    提前致谢!

1 个答案:

答案 0 :(得分:1)

我的案子似乎很少见。我在基于Amazon Linux的EC2实例上构建了整个环境。由于几乎所有的yum软件包都不是最新版本,我不得不从源代码安装几乎所有yum软件包。通过这样做,我可能错过了配置未更改/添加。或者HAProxy所需的lib可能不是最新的。

无论如何,我尝试在基于ubuntu 12.04的EC2实例上再次构建环境。 HAProxy的工作就像一个带有一些配置调整的魅力。我现在可以连接我的SocketIO服务器来自JS,Python& PHP over SSL没有任何问题。我还可以创建一个安全的TCP Amazon ELB,它可以侦听443并将其代理到非标准端口(8xxx)。

如果有其他人遇到类似问题,请告诉我,我很乐意提供帮助!