NGINX反向代理IIS出现502错误 禁用TLS v1.3无效如何解决
问题根因
你之前的配置调整完全没有命中故障点:ssl_protocols 指令控制的是客户端到NGINX链路的TLS协议版本,对NGINX到上游IIS的反向代理TLS协商流程不生效,所以修改这个参数无法解决和后端的SSL握手报错。
这个502错误的本质是NGINX和上游做SSL握手时,默认协商的TLS版本、加密套件和Windows Server 2012(最高仅支持TLS 1.2)不匹配,和客户端访问NGINX时用TLS 1.3没有任何关联。
修复步骤
按以下操作即可解决问题:
- 删掉之前错误添加的全局
ssl_protocols TLSv1 TLSv1.1;配置,客户端到NGINX的链路完全可以保留TLS 1.3支持,不需要为了兼容上游降级客户端侧的安全协议。 - 在对应反向代理的
location配置块中,单独为上游连接指定TLS版本和兼容加密套件,参考配置如下:
location / { proxy_pass https://你的上游IIS服务地址; # 强制NGINX和上游握手时仅使用TLS 1.2,适配Windows Server 2012的协议支持上限 proxy_ssl_protocols TLSv1.2; # 指定Windows Schannel(WS2012默认安全组件)支持的加密套件,避免套件不匹配导致握手中断 proxy_ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; # 保留你之前调整过的SNI相关配置即可 proxy_ssl_server_name on; proxy_ssl_name 对应上游服务的域名; }
- 执行配置语法校验,避免配置写错导致服务异常:
nginx -t
- 校验通过后重载NGINX配置让规则生效:
systemctl reload nginx
补充说明
- Ubuntu 22.04默认软件源提供的NGINX 1.18.0原生支持
proxy_ssl_protocols参数,不需要额外升级NGINX版本。 - 客户端到NGINX、NGINX到上游是两段完全独立的TLS链路,协议版本、加密套件配置互不影响,不需要为了兼容老后端降低用户侧的访问安全等级。
- 如果完成上述配置后仍有握手报错,可以临时把对应域名的错误日志级别调整为
debug,日志会明确打印握手失败的具体阶段,方便进一步定位。
内容的提问来源于stack exchange,提问作者rd1218
相关产品推荐
相关产品推荐

