5

我有一个 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

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

提前致谢!

4

1 回答 1

1

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

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

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

于 2013-08-19T14:04:56.503 回答