@microsoft/signalr部署后WebSocket无法正常连接问题咨询
SignalR 部署到服务器后无法连接故障排查点
1. 服务器端 WebSocket 功能未启用
- IIS 环境:需要在「服务器管理器 > 角色和功能 > Web 服务器 > 应用程序开发」中勾选安装「WebSocket 协议」
- Nginx/Apache 反向代理环境:需要额外配置 WebSocket 转发规则
- 云 PaaS 环境(如 Azure App Service、云服务商托管服务等):需要在服务配置页手动开启 WebSocket 支持
2. 反向代理 WebSocket 转发配置错误
以 Nginx 为例,需要在对应站点的 location 配置块中添加以下规则,否则无法完成 WebSocket 握手:
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600s; # 避免长连接被默认超时切断
3. 路由与权限配置不匹配
- 检查 ASP.NET Core 服务端的 Hub 路由配置,是否和前端请求的路径完全匹配,示例:
app.MapHub<SpreadsheetHub>("/staging/web-services/hubs/spreadsheethub"); - 检查服务端 CORS 配置:如果前端和服务端跨域,需要显式允许前端域名,并且开启
AllowCredentials(),不能使用AllowAnyOrigin() - 检查你配置的请求域名
demo是否在服务器环境可以正常解析,SSL 证书是否合法有效,未过期、未被浏览器拦截
4. skipNegotiation 参数带来的限制
你配置了 skipNegotiation: true 会直接跳过 SignalR 的传输协商步骤,强制使用 WebSocket,这种场景下:
- 不能使用没有开启粘性会话的负载均衡,否则 WebSocket 连接可能被转发到不同的服务实例导致握手失败
- 服务端必须完全支持 WebSocket 协议,不兼容降级到其他传输方式
排查实操步骤
打开浏览器开发者工具的「网络」标签,筛选「WS」类型请求,查看 WebSocket 握手的状态码:
- 404:路径配置错误,检查服务端 Hub 路由和前端请求地址
- 403:CORS 或权限校验失败
- 502/504:反向代理配置错误,或者服务未正常启动
- SSL 相关错误:证书无效、域名不匹配
内容的提问来源于stack exchange,提问作者Shanmugaraja_K
相关产品推荐
相关产品推荐

