NGINX配置SSL反向代理WebSocket服务无法建立连接问题求助
问题原因排查及解决方案
可能的核心原因
- websocket-sharp 本身对 HTTP 请求头的大小写、格式非常敏感,NGINX 默认转发的头不符合其校验规则
- 未开启 websocket-sharp 服务端的反向代理请求支持
- NGINX 配置存在不规范项,导致关键请求头被丢弃
分步排查方法
- 先查看 NGINX 错误日志定位链路问题
执行命令查看实时日志:
重点看有没有上游连接拒绝、请求头非法、SSL握手失败类报错。tail -f /var/log/nginx/error.log - 排除客户端问题,用工具直接测试 WSS 链路
安装 wscat 后执行:
如果能正常连接说明是Unity客户端配置问题,连接失败则问题出在NGINX到服务端的链路。wscat -c wss://game.okdev.se - 开启 websocket-sharp 服务端调试日志,查看请求被拒绝的具体原因
服务端初始化时添加日志配置:
查看日志中有没有收到升级请求、有没有因为头校验不通过拒绝连接的记录。wssv.Log.Level = LogLevel.Debug;
修复方案
1. 修正NGINX配置
把原location块替换为以下配置:
location / { proxy_http_version 1.1; proxy_pass http://localhost:5009; # 修正Connection头大小写,适配websocket-sharp校验规则 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; # 修正为中划线,避免NGINX默认丢弃带下划线的请求头 proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect default; client_max_body_size 1000m; # 延长WebSocket长连接超时时间,避免默认60秒自动断连 proxy_read_timeout 86400s; proxy_send_timeout 86400s; }
修改后执行nginx -s reload重载配置。
2. 开启websocket-sharp服务端反向代理支持
服务端初始化时添加如下配置,允许反向代理转发的请求,这是该框架的高频坑点:
wssv = new WebSocketServer(port); wssv.AllowForwardedRequest = true; wssv.AddWebSocketService("/", () => new SocketInstance(this));
3. 可选:客户端兼容配置(仅测试环境用)
如果存在证书校验类问题,测试阶段可以临时添加证书忽略回调,生产环境请删除该配置:
ws = new WebSocket("wss://game.okdev.se/"); ws.SslConfiguration.ServerCertificateValidationCallback = (sender, cert, chain, errors) => true;
内容的提问来源于stack exchange,提问作者Yogsther
相关产品推荐
相关产品推荐

