该报错本质是nginx与https后端tls握手被对方主动中断,非网络不通;常见于反向代理公网服务、saas接口或云多租户场景,需先直连验证后端可达性,再启用proxy_ssl_server_name on支持sni、禁用proxy_ssl_session_reuse、调优超时及缓冲区参数。

这个报错本质是 Nginx 在跟 HTTPS 后端建立 SSL 连接时,对方主动中断了握手过程。不是网络不通,而是 TLS 协商阶段就失败了。常见于反向代理公网服务、SaaS 接口或云上多租户系统时。
检查后端是否真实可达且服务正常
先排除最基础的问题:目标服务本身是否在运行、监听端口是否开放、证书是否有效。
- 用 curl 直连后端地址(如 curl -v https://example.com),确认能完成 TLS 握手并返回响应
- 如果后端是容器或内网服务,避免写 127.0.0.1 —— Nginx 运行在宿主机时,它访问的是自己本地回环,而非容器内部
- 检查后端日志,看是否有拒绝连接、证书校验失败或进程崩溃记录
启用 SNI 支持(proxy_ssl_server_name on)
当后端是共享 IP 的多域名服务(比如云厂商的负载均衡、K8s Ingress、SaaS 平台),必须告诉后端“你要访问哪个域名”,否则它无法选择对应证书和虚拟主机。
- 在 location 或 upstream 块中添加:proxy_ssl_server_name on;
- 同时确保 proxy_pass 使用的是域名(如 https://api.service.com),而不是纯 IP
- 该指令要求 Nginx ≥ 1.7.0,旧版本(如 1.4.x)需升级
禁用 SSL 会话复用(proxy_ssl_session_reuse off)
某些后端不支持或错误处理 SSL session resumption,会导致第二次请求握手失败,表现为首次成功、后续 502。
- 显式关闭复用:proxy_ssl_session_reuse off;
- 尤其适用于对接 Kibana、旧版 Tomcat、部分国产加密网关或自建 OpenSSL 服务
- 配合 proxy_ssl_protocols TLSv1.2 TLSv1.3 明确协议范围更稳妥
调优超时与缓冲区参数
握手被重置有时是因底层 TCP 连接在协商过程中被中间设备(防火墙、WAF、LB)因超时或包长异常而切断。
- 延长握手等待时间:proxy_connect_timeout 30s;
- 增大 SSL 握手缓冲区:proxy_buffer_size 128k;
- 避免大 body 触发中间设备拦截:client_max_body_size 20m; 和 proxy_buffering on;
- 若后端响应慢,同步调整 proxy_read_timeout 120s;











