【问题标题】:NodeJS - SocketIO over SSL with websocket transport使用 websocket 传输的 SSL 上的节点套接字
【发布时间】:2013-08-19 22:04:56
【问题描述】:

我有一个 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-pollingPython 在握手时得到 502
  3. 通过 STunnel 代理(用于 HTTPS)-> HAProxy(Websocket 代理)-> Node(SocketIO)- 这也不起作用。 Python 客户端在握手时仍会收到 502。
  4. 代理通过 Stunnel(HTTPS) -> Node(SocketIO) - 这也不起作用。不确定 STunnel 是否支持 websocket 代理
  5. node-http-proxy :在 websocket 上抛出 500(发生错误:{"code":"ECONNRESET"}) 并回退到 xhr-polling

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

提前致谢!

【问题讨论】:

  • 我们正在尝试使用 socketIO-client 从 python 客户端将 node.js 服务器与 socket.io 连接,但没有成功。你能分享一些连接中的代码sn-ps吗?
  • 如果您使用的是 SocketIO 1.x,python 客户端将无法工作。尝试将 SocketIO 0.9 与 python 客户端一起使用,如果它仍然不起作用,请告诉我。 python客户端socketIO-client的作者正在努力更新以匹配1.x版本。
  • 谢谢。这真的是我的问题。

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


【解决方案1】:

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

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

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

【讨论】:

  • 您能分享一下您的 HAProxy 配置吗?您还在 HA 代理上使用 nginx 吗?如果是,如何保护到 nginx 的流量。
  • @RanaDeep 很抱歉这么晚才回复。不,我没有将 Nginx 与 HAProxy 一起使用。如果你还需要配置HAProxy config
猜你喜欢
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2020-02-11
  • 2013-05-14
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
相关资源
最近更新 更多