You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS 10配置Socket.IO反向代理失败问题排查

IIS 10反向代理配置Socket.IO时404错误解决

配置Express.js的IIS 10反向代理后,Socket.IO请求返回404错误,响应提示Cannot GET /Rejected-By-UrlScan。当前使用的反向代理规则如下:

<rule name="ReverseProxyInboundRule1" stopProcessing="true">
    <match url="(.*)" />
    <action type="Rewrite" url="http://localhost:7000/{R:1}" />
</rule>

问题原因

这个错误是IIS的UrlScan模块拦截了Socket.IO请求导致的。Socket.IO的请求路径包含特殊格式(比如/socket.io/?EIO=4&transport=polling&t=...),UrlScan默认规则会限制这类带特殊查询参数或路径格式的请求。

解决步骤

  • 修改UrlScan配置文件(默认路径C:\Windows\System32\inetsrv\urlscan\UrlScan.ini):
    • 找到AllowVerbs项,确保GET、POST、OPTIONS都在允许列表内(Socket.IO依赖这些请求方法)
    • 找到AllowQueryString项,设置为1以允许查询字符串
    • 找到DenyUrlSequences项,移除可能拦截Socket.IO路径的规则(比如含?、=的限制)
  • 调整IIS反向代理规则,确保Socket.IO路径被正确转发,可新增专门的匹配规则:
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
    <match url="(.*)" />
    <action type="Rewrite" url="http://localhost:7000/{R:1}" />
</rule>
<rule name="SocketIORewrite" stopProcessing="true">
    <match url="^socket.io/(.*)" />
    <action type="Rewrite" url="http://localhost:7000/socket.io/{R:1}" />
</rule>
  • 重启IIS服务,让配置生效
  • 检查Express端Socket.IO配置,确保允许跨域(若前后端域名不同):
const io = require('socket.io')(server, {
    cors: {
        origin: "你的前端域名或*",
        methods: ["GET", "POST"]
    }
});

内容的提问来源于stack exchange,提问作者Ariff Naj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:24:52