Websocket不工作(SSL加速?)

首次在PROD环境下testing一个socket.io应用程序时,我们发现xhr-polling传输(Ajax长轮询)工作时, websocket传输不起作用。

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

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

但是那些服务器 – >客户端消息永远不会到达(我甚至不确定客户端 – >服务器消息是否到达服务器端)。 最终(大约6秒后),提琴手报告了一个

 Read from Server failed... 

并build立了一个新的连接,就像第一个连接不成功一样。

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

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

我认为防火墙不可能是罪魁祸首,因为它看到的只是一个SSLencryption的数据stream,而且非websocket传输起作用。 我也尝试了socket.iomatch origin protocol选项,但没有成功。

不幸的是我不能在那个环境中自由地玩,所以我试图在我的DEV环境中复制这个问题,但没有成功。 我创build了一个软件SSL代理(使用node.jshttp-proxy ),它应该类似于BIG-IP。 但是通过带有websockets的SSL代理工作得很好。

这可能是BIG-IP的问题吗? 组态? 还有什么呢?

截至2012年12月,BIG-IP不支持WebSocketstream量的SSL卸载。 因为这些请求看起来像HTTP,所以它们是由一个HTTP引擎处理的,该引擎不知道何时WebSocket连接的stream向改变。 WebSocket连接之前不要使用SSL卸载,直到它正式受支持。