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

NGINX配置SSL反向代理WebSocket服务无法建立连接问题求助

问题原因排查及解决方案

可能的核心原因

  • websocket-sharp 本身对 HTTP 请求头的大小写、格式非常敏感,NGINX 默认转发的头不符合其校验规则
  • 未开启 websocket-sharp 服务端的反向代理请求支持
  • NGINX 配置存在不规范项,导致关键请求头被丢弃

分步排查方法

  1. 先查看 NGINX 错误日志定位链路问题
    执行命令查看实时日志:
    tail -f /var/log/nginx/error.log
    
    重点看有没有上游连接拒绝、请求头非法、SSL握手失败类报错。
  2. 排除客户端问题,用工具直接测试 WSS 链路
    安装 wscat 后执行:
    wscat -c wss://game.okdev.se
    
    如果能正常连接说明是Unity客户端配置问题,连接失败则问题出在NGINX到服务端的链路。
  3. 开启 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:36:00