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

Docker部署Nginx搭配CloudFlare Full模式出现526无效SSL证书错误求助

排查CloudFlare 526错误与Docker Nginx配置问题

核心问题分析

CloudFlare返回「526 Invalid SSL certificate」,结合Nginx日志中出现的\x16\x03\x01...格式的400请求(这是TLS握手的Client Hello二进制数据被当作HTTP请求处理的特征),可以确定:Docker容器内的Nginx 443端口未配置SSL证书及相关SSL参数,导致CloudFlare与源站(容器Nginx)的SSL握手失败。

非Docker环境正常是因为该环境下的Nginx已正确配置SSL证书,但Docker部署时遗漏了证书挂载与SSL配置步骤。

解决步骤

1. 补全Nginx的SSL配置

修改你的production.conf,在server块中添加SSL相关配置:

server {
    listen       443 ssl;  # 明确开启SSL监听
    listen  [::]:443 ssl;
    server_name  api.mydomain.com;

    # 指定证书路径(容器内路径)
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # 可选:添加基础SSL优化参数
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://api:3000;
    }
}

2. 挂载证书到Docker容器

修改Docker Compose配置,将宿主机上的证书目录挂载到容器内指定路径:

nginx:
    image: nginx:1.24.0-alpine
    restart: always
    ports:
      - "443:443"
    volumes:
      - ./docker/nginx/production.conf:/etc/nginx/conf.d/default.conf
      - ./path/to/your/ssl:/etc/nginx/ssl  # 替换为宿主机证书实际目录

3. 验证配置与重启

  • 进入容器检查Nginx配置合法性:
    docker exec -it <nginx-container-name> nginx -t
    
  • 重启容器使配置生效:
    docker-compose restart nginx
    
  • 本地测试SSL握手是否正常:
    openssl s_client -connect localhost:443
    
    若返回正常的SSL握手信息,说明配置生效。

4. 补充说明

宿主机执行curl https://localhost/endpoint正常可能是因为宿主机本地的Nginx(非容器内)已配置SSL,或者curl实际使用了HTTP协议(需确认命令是否正确)。容器内的Nginx才是CloudFlare实际连接的源站,必须确保其443端口正确配置SSL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:05:23