我正在尝试通过IIS上的反向代理连接到websockets服务器(websockify)。IIS和websockets服务器驻留在同一物理服务器上(Windows server 2012 R2、IIS8.5、ARR 3、Websockets已启用)。我已经看到了一些关于这方面的问题,有人建议这应该适用于IIS 8和ARR 3,但目前还没有实际的解决方案。我有一些在IIS中使用http/https反向代理的经验,但这是我第一次尝试使用websockets。
例如:
原始url: ws://10.2.1.10/websockify
反向代理需要将其转换为: ws://10.2.1.10:5901/websockify
Web.config中过于通用的示例规则:
<rewrite>
<rules>
<rule name="WS reverse proxy" stopProcessing="true">
<match url="(.*)" />
<conditions> <add input="{CACHE_URL}" pattern="^(.+)://" />
</conditions>
<action type="Rewrite" url="{C:1}://10.2.1.10:5901/websockify"/>
</rule>
</rules>
</rewrite>
根据失败的请求跟踪,url似乎已转换,但由于某种原因,它无法到达位于10.2.1.10:5901的websocket服务器。
最终目标是结合noVNC/websockify,以提供对网络上多个VNC服务器的基于浏览器的客户端访问。任何帮助理解如何反向代理websockets的人都将不胜感激。
发布于 2017-11-16 20:12:22
正如@jowo所说,IIS8/8.5似乎不支持Sec-Websocket-Extensions。也就是说,我采用的变通方法是简单地重写有问题的服务器变量。首先将HTTP_SEC_WEBSOCKET_EXTENSIONS添加到允许的服务器变量列表,然后将其添加到您的规则中:
<serverVariables><set name="HTTP_SEC_WEBSOCKET_EXTENSIONS" value="" /></serverVariables>
这样,目的地就不会收到麻烦的permessage-deflate :)
发布于 2020-03-17 05:50:38
TLDR用于:
通过传递选项perMessageDeflate
,
const io = require("socket.io")(server, {
transports: ["websocket", "polling"],
perMessageDeflate: false
});
https://stackoverflow.com/questions/34316825
复制相似问题