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

Docker容器Nginx反向代理SSL握手版本号错误排查

故障根因

报错SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number是典型的「HTTPS请求发到了明文HTTP端口」问题:你的反向代理配置里用https://website-container:443向上游发起SSL握手,但后端网站容器的Nginx 443端口根本没启用SSL/TLS,返回的是明文HTTP响应,代理端解析SSL记录时发现格式、版本号完全不匹配,直接抛出错误。
看你贴的后端Nginx配置,server块只写了listen 443;,既没加ssl监听参数,也没配置任何SSL证书路径,这个端口实际运行的是明文HTTP服务,根本不是HTTPS服务。你之前其他环境部署正常,基本是对应环境的后端配置正确加了SSL相关参数,这次部署后端时漏了配置。

验证步骤

进反向代理容器执行两条命令即可确认问题:

# 用明文HTTP请求上游443端口
curl http://website-container:443
# 用HTTPS请求上游443端口,看握手报错
curl -v https://website-container:443

如果第一条命令能正常返回站点内容,第二条命令复现你遇到的SSL握手错误,即可100%定位问题。

修复方案

二选一即可,根据你的架构需求选:

方案1:代理层做SSL卸载(推荐,架构更简单)

如果不需要端到端加密,只需要在反向代理层处理HTTPS,后端跑明文HTTP即可,直接修改反向代理的Nginx配置:

location / {
    # 把proxy_pass的协议从https改成http
    proxy_pass http://website-container:443;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    # 删掉无用的上游SSL会话复用配置
    # proxy_ssl_session_reuse on;
    # 新增头告诉后端原始请求是HTTPS协议,避免后端程序生成错误的HTTP链接
    proxy_set_header X-Forwarded-Proto https;
}

改完重载代理Nginx即可。

方案2:后端开启HTTPS,实现端到端加密

如果要求代理到后端的链路也走HTTPS,就修改后端Nginx配置:

  • 把SSL证书通过绑定挂载的方式映射到后端网站容器内
  • 调整后端server块配置:
server {
        # 监听指令后加ssl参数,开启端口SSL能力
        listen 443 ssl;
        # 补充证书配置,路径替换为你后端容器内证书的实际路径
        ssl_certificate /path/inside/container/fullchain.pem;
        ssl_certificate_key /path/inside/container/privkey.pem;

        index index.php index.html;
        root /usr/share/nginx/html;
 
        ssl_verify_client off;

        # 原有其余配置保持不变即可
        if (!-e $request_filename) {
             rewrite ^(.+)$ /index.php?q=$1 last;
        }

        location / {
            root /usr/share/nginx/html;
        }


        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass balfp-php:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;

        }

         location ~ /\.ht {
             deny all;
         }

         error_log /usr/share/nginx/logs/error.log;
         access_log /usr/share/nginx/logs/access.log;
}

改完重载后端Nginx即可。

其他排查点

如果上述配置调整后仍报错,再检查两个常见问题:

  • 后端容器443端口是否被其他非Nginx的明文服务占用
  • proxy_pass里的上游端口是否写错,比如后端HTTPS实际监听8443,误填成443

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:30:42