Nginx Proxy Manager出现502 Bad Gateway错误(SSL握手失败)求助
兄弟,我一眼就抓准你日志里的关键问题了:SSL_do_handshake() failed (SSL: error:0A00042E:SSL routines::tlsv1 alert protocol version:SSL alert number 70),这本质就是Nginx Proxy Manager(反向代理)和后端服务器的SSL/TLS版本不兼容导致的握手失败,给你几个落地的解决办法:
先摸清后端服务器支持的TLS版本
你既然在容器里用curl能通,那就在容器里加参数测试,依次跑这几个命令:curl -v --tlsv1.0 https://你的后端FQDN地址 curl -v --tlsv1.1 https://你的后端FQDN地址 curl -v --tlsv1.2 https://你的后端FQDN地址 curl -v --tlsv1.3 https://你的后端FQDN地址哪个命令能正常返回内容,就说明后端支持对应的TLS版本,把这个版本记下来。
给Nginx Proxy Manager强制指定兼容的TLS版本
进入NPM的管理界面,找到出问题的代理主机配置,切换到「高级」标签页,在「自定义Nginx配置」里加这段代码(把TLS版本改成你刚才测试出来的后端支持的版本):proxy_ssl_protocols TLSv1.2 TLSv1.3; # 比如测试后发现后端只支持TLSv1.2,就只写这一项 proxy_ssl_ciphers HIGH:!aNULL:!MD5; # 可选,指定更兼容的加密套件保存配置后重启NPM服务,再试试访问。
关于IP和FQDN的问题
你改hosts用FQDN解决404的操作是对的,大概率后端的SSL证书是绑定这个域名的,而且后端的路由规则也只认域名,所以就继续用FQDN的方式,不用切回IP了。额外排查方向
如果改了版本还是不行,可以临时在自定义配置里加proxy_ssl_verify off;(生产环境不推荐这么干,仅用于排查),如果能正常访问,说明还有SSL证书验证的问题,但从你的错误日志来看,版本不兼容是核心矛盾,先优先解决这个。
另外也可以检查下后端服务器的SSL配置,看看是不是禁用了NPM默认使用的TLS版本——比如有些老服务器只开了TLSv1.0,但NPM默认禁用了这种老旧不安全的版本,这时候要么在NPM里开启对应版本(如果能接受安全风险的话),要么升级后端的TLS配置。
备注:内容来源于stack exchange,提问作者Mouad Rahoui




