nacos 控制台监听 8848 端口,nginx 用 proxy_pass https 反代到后端,浏览器访问报 ERR_SSL_PROTOCOL_ERROR,curl 直接提示 wrong version number。
一开始怀疑是「端口转发把 https 流量指到了 http 端口上」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。后端根本没有开 TLS,nginx 却按 https 去握手,收到明文字节自然报错。也可能是后端证书是自签的,nginx 校验失败后连接被中断。
还有一种情况,中间有设备做 TLS 卸载,nginx 与后端之间的协议没对齐。
第一件事是确认后端端口是不是真的 TLS
openssl s_client -connect 10.0.0.9:8848 -brief </dev/null
再往下用 curl 分别按 http 和 https 试一次
curl -sv http://10.0.0.9:8848/ 2>&1 | head -15
接着按实际协议改 proxy_pass 的 scheme
grep -n proxy_pass /etc/nginx/conf.d/nacos.conf
剩下的就是重载后从外部验证一次
curl -I https://nacos.lu0.cn/
当时还开着另一个排查窗口,两边日志对照着看才定位到。
改完先别撤,确认这几项。curl 访问外部域名返回 200 且不再报协议错误,nginx error log 里没有 SSL_do_handshake 相关记录。
这里还有个坑。wrong version number 基本等价于对端不是 TLS,先看后端监听方式再改配置;反代 https 后端时 SNI 和证书校验也要一并确认。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
