【发布时间】:2015-01-15 00:03:37
【问题描述】:
我正在 Windows Server 2008 R2 上使用 IIS 7.5 运行一个小网站。 我也在 3000 端口上运行了一个 node.js 应用程序。
来自网站(客户端浏览器)的 Http 调用从 http://example.com/node/whatever 反向代理到 http://localhost:3000/whatever。到目前为止一切正常。
问题是当我尝试使用 socket.io 时。
我收到了:
WebSocket connection to 'ws://example.com/socket.io/?EIO=3&transport=websocket&sid=adb9WRpoMFYRoS0vAAAB'
failed: Error during WebSocket handshake: Unexpected response code: 502
如果我没记错的话,我很确定:
它确实将初始请求转发到我的服务器,因为对 websocket 服务器的初始请求是标准 HTTP 请求(带有一些额外的标头)。 IIS 确实知道这一点并只是转发请求。但是,在收到 websocket 请求后,websocket 服务器会发送 101 响应并切换到 websocket 模式。 IIS 不了解 websocket 流量,因此无法代理。
有没有为ws://地址配置反向代理的技巧或解决方案?
【问题讨论】:
-
有人告诉我,COMET 代理可能会有所帮助,但我不知道该怎么做..
-
您使用的是哪个版本的 socket.io ? Post 1.0 使用彗星技术(长轮询)。另外,看起来您需要 Windows Server 2012 吗?或者为您查看blogs.technet.com/b/erezs_iis_blog/archive/2013/09/16/…:guyellisrocks.com/2014/06/…
-
另见此相关服务器故障线程:serverfault.com/questions/645077/…
标签: node.js sockets socket.io iis-7.5 reverse-proxy