docker compose部署jwilder/nginx-proxy反向代理时HTTPS无法生效问题
问题根因及解决方案
你当前的问题核心出在app服务的环境变量配置错误,直接导致jwilder/nginx-proxy无法识别HTTPS配置规则,不会生成443端口的监听配置。
错误点修正
你的docker-compose.yml中app服务的环境变量存在两处错误:
- 变量名拼写错误:
VIRTUAL_PORTO是错误写法,正确变量名为VIRTUAL_PORT - 变量值错误:
VIRTUAL_PORT需要填写Rails应用容器内部监听的端口(默认是3000),而非https
修正后的app服务环境变量配置如下:
app: container_name: app . . . environment: - VIRTUAL_HOST=app.test - VIRTUAL_PORT=3000 - HTTPS_METHOD=redirect - CERT_NAME=app.test
生效操作步骤
- 保存修改后的docker-compose.yml文件
- 执行命令重建所有容器,确保配置生效:
docker-compose up -d --force-recreate - 等待1~2分钟让nginx-proxy自动重新生成反向代理配置
- 验证配置是否正常:
- 执行
docker exec -it proxy cat /etc/nginx/conf.d/default.conf,确认配置中已出现443端口监听的server块 - 执行
ss -tulpn | grep 443,确认宿主机443端口已被docker-proxy监听
- 执行
额外排查项
如果修正后仍有问题,可按以下顺序排查:
- 查看proxy容器的运行日志,确认是否存在证书解析错误:
docker logs proxy - 确认自签证书的Common Name或SAN字段包含
app.test,避免证书不被识别 - 确认宿主机防火墙(ufw/firewalld/安全组)已放通443端口的入站规则
- 验证
/home/ssl目录下的证书文件权限是否允许nginx读取,可临时将证书权限调整为644测试
内容的提问来源于stack exchange,提问作者Spätzle
相关产品推荐
相关产品推荐

