Windows Server 2019上Nginx 1.25.2 SSL握手报错(10054)求助
问题分析与排查方案
可能原因
- 配置生效范围错误:
proxy_ssl_protocols仅配置在server块,未覆盖实际处理反向代理的location块,导致规则未生效。 - 密码套件不匹配:Nginx 1.25.x 对 TLSv1.2 的默认密码套件与 1.17.x 存在差异,即使指定了 TLSv1.2,上游服务器仍不支持新版默认套件。
- SNI 缺失:上游服务器依赖 SNI(Server Name Indication)识别站点,新版本 Nginx 未自动发送 SNI 或相关配置未开启。
- SSL 扩展兼容性:新版 Nginx 默认启用 ALPN 等 SSL 扩展,上游服务器不支持该扩展导致握手中断。
排查步骤(仅用 curl)
1. 验证上游服务器的 TLS 兼容性
通过 curl 直接发起请求,确认上游对 TLSv1.2 的支持情况及可用密码套件:
curl -X POST https://z.z.z.z:443/abc/abc.asmx --tlsv1.2 -v
观察输出中的握手细节(如 SSL connection using TLSv1.2 / xxx),记录成功协商的密码套件。
2. 模拟 Nginx 的请求头
Nginx 反向代理会传递原始请求的 Host 头,用 curl 模拟该场景,验证上游是否接受:
curl -X POST https://z.z.z.z:443/abc/abc.asmx --tlsv1.2 -H "Host: y.y.y.y:443" -v
若此请求成功,说明上游依赖正确的 Host 头;若失败,需在 Nginx 配置中确保 proxy_set_header Host $host:$server_port;。
3. 调整 Nginx 配置(针对已发现的问题)
确保代理 SSL 规则生效
将配置放在对应的 location 块中,覆盖具体代理逻辑:
location /abc.asmx { proxy_pass https://z.z.z.z:443/abc/abc.asmx; proxy_ssl_protocols TLSv1.2; # 填入 curl 测试成功的密码套件 proxy_ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"; # 开启 SNI(若 curl 测试发现需要) proxy_ssl_server_name on; # 禁用 ALPN(若上游不支持) proxy_ssl_alpn off; # 传递正确的 Host 头 proxy_set_header Host $host:$server_port; }
启用 debug 日志定位细节
修改 Nginx 的日志级别为 debug,重启后查看完整握手过程:
error_log logs/error.log debug;
日志会显示 SSL 握手时使用的协议、密码套件、SNI 信息等,可直接定位不兼容环节。
4. 排除系统层面限制
检查 Windows Server 2019 的防火墙/安全软件,确认升级 Nginx 后未新增出站规则阻止 TLS 握手;也可通过 curl 访问其他 HTTPS 站点(如 curl https://www.google.com --tlsv1.2 -v)验证本地 TLS 功能正常。
内容的提问来源于stack exchange,提问作者Peter Truong
相关产品推荐
相关产品推荐

