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

SignalR WebSocket在IIS 10的80端口无法连接问题求助

问题排查与解决方案

针对你遇到的80端口无法建立WebSocket连接、仅443和本地RDP访问正常的问题,结合SignalR 2.4.3 + IIS 10 + .NET 4.6的环境,给出以下排查方向和解决步骤:

1. 先抓关键日志定位问题

你已经开启了$.connection.hub.logging = true,打开浏览器控制台,仔细查看SignalR输出的日志:

  • 找到握手请求的URL、HTTP状态码(比如404/500/403)
  • 查看响应头是否包含Upgrade: websocket和Connection: upgrade
    这些信息能直接缩小问题范围。

2. 检查IIS的WebSocket配置

虽然你说已启用,还是再确认一遍:

  • 打开服务器管理器 → 添加角色和功能 → 确认「Web服务器 → 应用开发 → WebSocket」已安装
  • 打开IIS管理器 → 目标站点 → 功能视图 → 点击「WebSocket」→ 确保状态是「已启用」(默认启用,但可能被误禁用)

3. 排查反向代理/中间件问题

如果服务器前端有ARR、Nginx、负载均衡等中间件,80端口的WebSocket请求可能没被正确转发:

若使用IIS ARR:

  • 打开IIS管理器 → 服务器节点 → 「应用程序请求路由」→ 「服务器代理设置」→ 勾选「启用WebSocket支持」

若使用Nginx:

在Nginx配置中添加WebSocket转发规则:

location /signalr {
    proxy_pass http://你的服务器IP或域名;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

4. 验证SignalR路径与CORS配置

路径问题:

如果站点部署在虚拟目录下,前端需要指定正确的Hub URL:

$.connection.hub.url = "/你的虚拟目录/signalr";

本地RDP访问时路径可能自动匹配,但外部访问80端口时路径错误会导致握手失败。

CORS问题:

如果前端是跨域访问80端口(比如前端域名和后端API域名不同),需在后端配置CORS:

  1. 安装NuGet包Microsoft.Owin.Cors
  2. 在Startup.cs中添加CORS支持:
using Microsoft.Owin.Cors;

public void Configuration(IAppBuilder app)
{
    // 允许所有跨域请求(生产环境建议限制特定域名)
    app.UseCors(CorsOptions.AllowAll);
    
    var hubConfig = new HubConfiguration();
    hubConfig.EnableDetailedErrors = true;
    app.MapSignalR(hubConfig);
}

5. 检查站点绑定与防火墙策略

站点绑定:

打开IIS管理器 → 目标站点 → 「绑定」:

  • 确认80端口的绑定没有设置错误的主机头(比如绑定了example.com,但你用IP访问80端口)
  • 若需支持IP和域名访问,可添加多个80端口绑定(一个带主机头,一个不带)

防火墙:

  • 服务器本地防火墙:检查入站规则,确保允许80端口的TCP流量,且没有拦截包含Upgrade头的请求
  • 网络防火墙:联系运维确认边界防火墙没有阻止80端口的WebSocket握手流量(部分防火墙会拦截非标准HTTP请求头)

6. 用curl测试服务器端WebSocket可用性

在服务器本地或能直接访问服务器的机器上,执行以下curl命令测试握手:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: 你的域名或IP" -H "Origin: http://你的域名或IP" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" -H "Sec-WebSocket-Version: 13" http://你的域名或IP/signalr/connect?transport=webSockets
  • 若返回101 Switching Protocols,说明服务器端WebSocket配置正常,问题出在网络或前端
  • 若返回404:路径错误;返回500:查看IIS日志(C:\inetpub\logs\LogFiles)找具体错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:36:32