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

Nginx反向代理WebSocket API时SSL握手超时问题解决

解决Nginx反向代理WebSocket时SSL握手超时问题

针对你遇到的SSL握手超时错误,从以下几个方向排查修复:

  • 验证上游API的SSL证书可信度
    Nginx默认会校验上游服务器的SSL证书,如果目标API使用自签名证书、证书链不完整,会直接导致握手失败。可以先临时添加proxy_ssl_verify off;到/ws/的location块中测试是否解决问题,但这只是临时方案,长期使用建议配置可信的CA证书:

    proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt; # 系统默认CA证书路径,或自定义证书路径
    proxy_ssl_verify on;
    proxy_ssl_verify_depth 2;
    
  • 调整SSL握手超时时间
    你添加的proxy_read_timeout是控制请求读取的超时,而SSL握手有单独的超时设置。在/ws/的location块中添加:

    proxy_ssl_timeout 120s; # 延长SSL握手超时时间,默认60秒
    
  • 排查网络连通性
    在Nginx服务器上执行curl命令,直接测试与目标API的SSL连接:

    curl -v https://external-api.net:7890/signalr/negotiate?clientProtocol=2.1&apiKey=MYAPIKEY
    

    如果curl也出现握手超时,说明是网络层面的问题(比如防火墙拦截、目标API端口未开放、路由故障),需要先解决网络连通性。

  • 优化Host头配置
    当前配置的proxy_set_header Host external-api.net;可以尝试替换为proxy_set_header Host $proxy_host;,让Nginx自动使用proxy_pass中指定的主机和端口,避免Host头不匹配导致的问题。

  • 指定支持的SSL协议版本
    如果目标API仅支持高版本SSL协议,可在location块中明确指定:

    proxy_ssl_protocols TLSv1.2 TLSv1.3;
    

修改后的完整/ws/location配置示例:

location /ws/ {
    proxy_pass https://external-api.net:7890/;
    set $args $args&apiKey=MYAPIKEY;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $proxy_host;

    # SSL握手相关配置
    proxy_ssl_timeout 120s;
    proxy_ssl_protocols TLSv1.2 TLSv1.3;
    # 若证书不可信临时使用,后续需替换为可信证书配置
    # proxy_ssl_verify off;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:17:23