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握手是否正常:
若返回正常的SSL握手信息,说明配置生效。openssl s_client -connect localhost:443
4. 补充说明
宿主机执行curl https://localhost/endpoint正常可能是因为宿主机本地的Nginx(非容器内)已配置SSL,或者curl实际使用了HTTP协议(需确认命令是否正确)。容器内的Nginx才是CloudFlare实际连接的源站,必须确保其443端口正确配置SSL。
内容的提问来源于stack exchange,提问作者nn3112337
相关产品推荐
相关产品推荐

