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

我有一个NodeJS-socketIO服务器,客户端从JS,PHP和Python中侦听。 当通过简单的HTTP / WS通道进行通信时,它就像一个魅力。

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

我试过的东西:

  1. 在节点上,使用https (使用商业证书)而不是http – 适用于通过节点提供页面,但不适用于socketIO
  2. 通过HAProxy代理(1.15-dev19) 。 从HTTPS(HAProxy)到HTTP(节点)。 无法让WebSocket传输工作,它回落到 JS上的xhr-pollingPython握手时获得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

我确定它是一个常见的用例,并且存在一个解决scheme。 真的很感激任何帮助。

提前致谢!

我的情况似乎是罕见的。 我在基于Amazon Linux的EC2实例上构build了整个环境。 由于几乎所有的yum软件包都不是最新的,我不得不从源码安装几乎所有的yum软件包。 通过这样做,我可以错过configuration不变/添加。 或者需要lib的HAProxy可能不是最新的。

无论如何,我试着在基于Ubuntu 12.04的EC2实例上再次构build环境。 HAProxy像一个configuration调整一点魅力工作。 我现在可以连接我的SocketIO服务器从JS,Python和PHP通过SSL没有任何问题。 我还可以创build一个Secured TCP Amazon ELB,它在443上侦听并将其代理到非标准端口(8xxx)。

让我知道如果有人遇到类似的问题,我会很乐意帮助!