如何配置Nginx反向代理外网HTTPS服务解决SNI域名缺失导致的502错误问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计850个文字,预计阅读时间需要4分钟。
直接输出结论:
怎么确认是 SNI 缺失引起的 502
别猜,看日志。打开 /var/log/nginx/error.log,重点搜这几类线索:
-
SSL_do_handshake() failed或SSL_connect() failed -
tlsv1 alert handshake failure(alert number 40)或tlsv1 alert internal error(alert number 80) - 日志里显示 Nginx 把
api.example.com解析成192.0.2.1,但你用curl -v https://192.0.2.1确实失败,而curl -v https://api.example.com成功
满足以上任意一条,基本就是 SNI 问题——后端 HTTPS 服务(比如 Cloudflare、某些 SaaS API)靠 SNI 区分虚拟主机,Nginx 不带 SNI,它就拒连。
proxy_ssl_server_name on 必须配合 proxy_ssl_name
只写 proxy_ssl_server_name on 不够,Nginx 还不知道该发哪个域名过去。
本文共计850个文字,预计阅读时间需要4分钟。
直接输出结论:
怎么确认是 SNI 缺失引起的 502
别猜,看日志。打开 /var/log/nginx/error.log,重点搜这几类线索:
-
SSL_do_handshake() failed或SSL_connect() failed -
tlsv1 alert handshake failure(alert number 40)或tlsv1 alert internal error(alert number 80) - 日志里显示 Nginx 把
api.example.com解析成192.0.2.1,但你用curl -v https://192.0.2.1确实失败,而curl -v https://api.example.com成功
满足以上任意一条,基本就是 SNI 问题——后端 HTTPS 服务(比如 Cloudflare、某些 SaaS API)靠 SNI 区分虚拟主机,Nginx 不带 SNI,它就拒连。
proxy_ssl_server_name on 必须配合 proxy_ssl_name
只写 proxy_ssl_server_name on 不够,Nginx 还不知道该发哪个域名过去。

