使用jwilder/nginx-proxy搭配Cloudflare SSL开启DNS代理后遇521错误求助
解决jwilder/nginx-proxy搭配Cloudflare Full SSL时的521错误问题
问题分析
你遇到的Cloudflare 521错误(Web Server Down),本质是Cloudflare无法与你的源站建立HTTPS连接。从你的配置和生成的Nginx配置来看,主要有两个核心问题:
- nginx-proxy未监听HTTPS端口(443):Cloudflare在Full SSL模式下,会向源站发起HTTPS请求,但你的nginx-proxy只开放了80端口,没有处理443的请求,导致连接失败。
- 后端服务的
VIRTUAL_PROTO配置错误:你设置了VIRTUAL_PROTO=https,但你的后端容器(saraswati-global、api-healed-id)只暴露了HTTP端口(3000、4001),nginx-proxy会尝试用HTTPS去连接后端,自然会失败。
解决方案步骤
1. 调整docker-compose.yaml配置
修改后的配置如下,关键修改点已标注:
version: "2" services: nginx-proxy: image: jwilder/nginx-proxy:alpine ports: - 80:80 - 443:443 # 新增:开启HTTPS端口监听 volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./certs:/etc/nginx/certs # 存放Cloudflare Origin证书和密钥 - ./vhost.d:/etc/nginx/vhost.d # 可选:用于自定义域名的Nginx配置 - ./html:/usr/share/nginx/html network_mode: bridge environment: - HTTPS_METHOD=noredirect # 保持HTTP和HTTPS都可访问,也可设为redirect强制HTTPS saraswati-global: image: asia.gcr.io/ordent-production/ordent/saraswati-global ports: - 3000:3000 environment: - VIRTUAL_HOST=beta.saraswati.global - VIRTUAL_PORT=3000 - VIRTUAL_PROTO=http # 修改:后端是HTTP服务,改为http network_mode: bridge api-healed-id: image: asia.gcr.io/ordent-production/ordent/api.healed.id ports: - 4001:4001 environment: - VIRTUAL_HOST=dev.healed.id - VIRTUAL_PORT=4001 - VIRTUAL_PROTO=http # 修改:同理改为http network_mode: bridge
2. 配置Cloudflare Origin证书
- 登录Cloudflare控制台,进入你的域名 →
SSL/TLS→Origin Server - 点击「Create Certificate」,选择默认证书类型,生成后下载证书文件(.pem格式)和私钥文件
- 将证书重命名为
beta.saraswati.global.crt,私钥重命名为beta.saraswati.global.key(如果是通配符证书,就用*.yourdomain.com.crt和*.yourdomain.com.key),放到docker-compose同级的certs目录下
3. 重启服务并验证
执行命令重启所有容器:
docker-compose down && docker-compose up -d
之后可以直接用curl测试源站的HTTPS连接:
curl -v https://beta.saraswati.global --resolve beta.saraswati.global:443:你的服务器IP
如果能正常返回内容,再开启Cloudflare的DNS代理,应该就不会出现521错误了。
额外说明
- 如果你希望强制所有请求走HTTPS,可以把
HTTPS_METHOD设为redirect,这样nginx-proxy会自动把HTTP请求重定向到HTTPS - 确保你的服务器防火墙开放了443端口,否则Cloudflare还是无法连接
- 生成的Nginx配置会自动包含HTTPS监听块,jwilder/nginx-proxy会根据
certs目录下的证书自动配置SSL
内容的提问来源于stack exchange,提问作者Dimas Satrio
相关产品推荐
相关产品推荐

