Docker部署的站点HTTPS访问报ERR_CONNECTION_REFUSED如何解决?
问题排查与解决方案
1. 检查Nginx容器运行状态与日志
先确认Nginx容器是否正常运行:
docker ps -a | grep reverseproxy
若容器处于运行中状态,查看运行日志定位错误:
docker logs reverseproxy
重点排查是否存在证书缺失、配置语法错误、文件找不到类的报错提示。
2. 验证SSL证书是否生成成功
先查看certbot容器的运行日志,确认证书生成流程是否正常完成:
docker logs certbot
如果日志提示证书生成失败,优先解决域名解析、ACME验证拦截类问题,保证证书正常生成。你也可以直接查看证书存储卷下是否存在对应文件:
# 查看宿主机上证书卷的存储内容 ls /var/lib/docker/volumes/example_certbot-etc/_data/live/example.com/
确认该路径下存在fullchain.pem和privkey.pem两个证书文件。
3. 测试Nginx配置语法正确性
进入Nginx容器执行配置校验命令:
docker exec reverseproxy nginx -t
如果返回结果不是语法校验成功,按照提示修正对应配置即可。
注意你配置中引用了include /etc/nginx/conf.d/options-ssl-nginx.conf;,需要确认该文件在Nginx容器内真实存在,很多自定义Nginx镜像默认没有该文件,缺失会导致Nginx启动失败,排查时可以先注释该行测试访问。
4. 检查外部端口访问限制
虽然宿主机443端口已被docker-proxy监听,但需要确认两层规则是否放行:
- 云服务器安全组是否开放443端口的入站规则
- 宿主机防火墙是否开放443端口,以firewalld为例可执行以下命令校验:
firewall-cmd --list-all # 若未开放443端口,执行以下命令添加规则 firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload
5. 本地验证443端口连通性
在宿主机本地执行curl命令测试,排除外部网络问题:
curl -v https://example.com --resolve example.com:443:127.0.0.1
如果本地可以正常访问,说明问题出在外部网络/防火墙规则;如果本地也提示连接拒绝,再回头排查Nginx容器内部的配置、证书问题。
内容的提问来源于stack exchange,提问作者ygetarts
相关产品推荐
相关产品推荐

