You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
注册

Nginx Proxy Manager出现502 Bad Gateway(openresty)问题求助

修复思路与解决方案

核心问题是Nginx Proxy Manager(NPM)与上游服务器的SSL/TLS版本协商失败,错误日志里的tlsv1 alert protocol version明确指向这一点——上游服务器只支持较旧的TLS版本,而NPM默认配置禁用了这些版本,导致握手失败返回502。

以下是针对性的修复步骤:

  • 第一步:确认上游服务器支持的SSL/TLS版本
    在能正常访问上游的Docker容器内,用curl指定不同TLS版本测试,找到上游兼容的版本:

    # 测试TLS 1.0
    curl -v --tlsv1.0 https://你的上游FQDN:端口
    # 测试TLS 1.1
    curl -v --tlsv1.1 https://你的上游FQDN:端口
    # 测试TLS 1.2
    curl -v --tlsv1.2 https://你的上游FQDN:端口
    

    记录下能成功返回响应的TLS版本。

  • 第二步:修改NPM的反向代理SSL协议配置
    在NPM的反向代理编辑页面,切换到「高级」选项卡,添加自定义Nginx配置,强制使用上游支持的TLS版本:

    # 示例:如果上游支持TLS1.0、TLS1.1、TLS1.2,就添加以下配置
    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # 可选:指定兼容的加密套件
    proxy_ssl_ciphers HIGH:!aNULL:!MD5;
    

    注意:只保留上游实际支持的协议版本,不要盲目添加不必要的旧版本(比如TLS1.0安全性较低,能不用就不用)。

  • 第三步:确保SNI配置正确
    部分上游服务器要求SNI(服务器名称指示)才能返回正确的证书,添加以下配置确保NPM在握手时发送正确的主机名:

    proxy_ssl_server_name on;
    

    这能解决因证书不匹配导致的握手失败问题。

  • 第四步:验证NPM容器的SSL配置差异
    因为Docker容器内curl正常,说明容器的SSL库默认允许旧版本,而NPM容器的Nginx默认禁用了。如果上面的配置无效,可以检查NPM容器内的Nginx主配置文件(通常在/etc/nginx/nginx.conf),确认全局SSL协议配置是否覆盖了反向代理的自定义配置,必要时调整全局配置。

内容的提问来源于stack exchange,提问作者Mouad Rahoui

火山引擎 最新活动