You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理Node服务出现net::ERR_SSL_PROTOCOL_ERROR问题排查

Nginx反向代理出现SSL协议错误的排查与修复

问题描述

我为Node服务配置了Nginx作为反向代理,证书由Let's Encrypt Certbot生成。当Node服务直接监听443并使用该证书时一切正常,但改用Nginx监听443并使用相同证书时,浏览器出现错误:(failed)net::ERR_SSL_PROTOCOL_ERROR。对应的Nginx site-available配置如下:

server{
    listen 443 ssl;
    server_name xxxxxx.hstgr.cloud;
    
    ssl_certificate /...path.../fullchain.pem;
    ssl_certificate_key /...path.../privkey.pem;
    
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        location /.well-known/acme-challenge/ {
            autoindex on;
            root  /...path.../.well-known/acme-challenge;
        }
    }
}

配置问题分析

  1. 嵌套location结构错误
    你把/.well-known/acme-challenge/的location嵌套在了/的location内部,这会导致Nginx处理ACME挑战请求时,优先走反向代理的逻辑,而非直接读取文件。这种嵌套结构可能干扰SSL握手的正常流程,甚至导致证书验证相关的请求无法正确响应。

  2. 缺少基础SSL兼容配置
    仅指定证书和监听443 ssl不足以保证SSL协商正常完成,缺少SSL协议版本、加密套件等必要配置时,浏览器可能无法和Nginx建立有效的SSL连接。

  3. ACME挑战的root路径配置错误
    root指令应该指向包含.well-known/acme-challenge目录的上级目录,而不是该目录本身。当前配置会导致Nginx在/...path.../.well-known/acme-challenge/.well-known/acme-challenge/路径下去找文件,显然无法找到。

修正后的配置

server{
    listen 443 ssl;
    server_name xxxxxx.hstgr.cloud;
    
    ssl_certificate /...path.../fullchain.pem;
    ssl_certificate_key /...path.../privkey.pem;

    # 添加基础SSL配置,确保与主流浏览器兼容
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    # 单独处理ACME挑战请求,避免嵌套
    location /.well-known/acme-challenge/ {
        autoindex on;
        root /...path...; # 指向包含.well-known的上级目录
    }
    
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

额外排查步骤

  • 验证配置有效性:执行nginx -t检查配置是否有语法错误,同时确认证书文件路径正确、Nginx进程有读取权限。
  • 检查端口占用:用netstat -tulpn | grep 443确认443端口仅被Nginx监听,避免端口冲突。
  • 查看错误日志:查看/var/log/nginx/error.log,里面会记录SSL握手失败的具体原因,比如证书损坏、协议不兼容等。

内容的提问来源于stack exchange,提问作者Jean-Loup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:52:13