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

Kar*_*pal 5 python ssl websocket node.js socket.io

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

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

我试过的事情:

  1. 在节点上,使用https(带有商业证书)而不是http - 适用于通过Node提供服务页面,但不适用于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

我确定它是一个常见的用例,并且存在一个解决方案.非常感谢任何帮助.

提前致谢!

Kar*_*pal 1

我的情况看来是个罕见的案例。我在基于 Amazon Linux 的 EC2 实例上构建了整个环境。由于几乎所有 yum 软件包都不是最新的,我必须从源代码安装几乎所有 yum 软件包。通过这样做,我可能会错过未更改/添加的配置。或者 HAProxy 所需的库可能不是最新的。

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

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