Websockets 不工作(ssl 加速?)

Websockets 不工作(ssl 加速?)

socket.io首次在 PROD 环境中测试应用程序时,我们发现虽然xhr-polling传输(Ajax 长轮询)有效,但websocket传输无效。

查看使用传输的数据Fiddler,我可以看到

  • UPGRADE发生并且
  • 来自服务器的第一条消息(总共 5 个字节)到达客户端。
  • 然后,客户端向服务器发送几条消息,这些消息通常会导致服务器->客户端消息

但这些服务器->客户端消息从未到达(我甚至不确定客户端->服务器消息是否到达服务器端)。最终(大约 6 秒后),Fiddler 报告

Read from Server failed...

并建立了一个新的连接,但和第一个连接一样不成功。

我们的设置看起来像这样:

互联网 -> 防火墙 -> BIG-IP 3600(终止 SSL)-> Node.js 服务器

我认为防火墙不可能是罪魁祸首,因为它看到的只是 SSL 加密的数据流,并且使用非 websocket 传输确实有效。我也尝试了match origin protocol中的选项socket.io,但没有成功。

不幸的是,我无法在该环境中自由玩耍,因此我尝试在我的 DEV 环境中复制该问题,但没有成功。我创建了一个软件 SSL 代理(使用node.jshttp-proxy,其工作方式应与 BIG-IP 类似。但是使用 websockets 通过该 SSL 代理工作正常。

这可能是 BIG-IP 的问题吗?配置问题?还有什么问题?

答案1

截至 2012 年 12 月,BIG-IP 不支持 WebSocket 流量的 SSL 卸载。由于请求看起来像 HTTP,因此它们由 HTTP 引擎处理,而 HTTP 引擎无法理解 WebSocket 连接的流向何时发生变化。在获得官方支持之前,请勿将 SSL 卸载与 WebSocket 连接一起使用。

相关内容