Docker-Compose开发环境中Nginx配置HTTPS遇到的语法错误与上游连接拒绝问题求助
解决Docker Compose + Nginx HTTPS配置的两个问题
1. 回顾第一个语法错误问题
你提到修复了第25行缺失分号的低级错误,这确实是导致unexpected "}"报错的核心原因——Nginx配置要求每一条指令必须以分号结尾,遗漏分号会让解析器无法正确识别指令边界,进而抛出语法错误。
2. 解决当前的连接拒绝错误(connect() failed (111: Connection refused))
这个错误的本质是Nginx容器内的localhost指向的是容器自身,而非你的myservice容器。在Docker Compose的默认网络环境中,容器之间需要通过服务名称来互相访问,而不是用localhost。
修复步骤:
修改nginx.conf中的proxy_pass指令,把目标地址换成你的服务名称:
proxy_pass http://myservice:8080/;
这里的myservice就是你docker-compose.yml中定义的服务名,Docker会自动在内部网络中解析这个名称到对应容器的IP地址。
额外检查点:
- 确认
myservice容器是否正常启动:执行docker-compose logs myservice查看日志,验证服务确实在8080端口监听。 - 确认
myservice的端口配置:你已经用expose: - 8080暴露了端口,这在Docker Compose的默认网络中足够,无需映射到主机端口。 - 检查代理头指令格式:确保所有
proxy_set_header指令都以分号结尾,避免再次触发语法错误。
修复后的完整nginx.conf示例:
http { server { listen 80; server_name example.com; return 301 https://example.com$request_uri; } server { listen 443 ssl; server_name example.com; ssl_certificate /ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /ssl/private/nginx-selfsigned.key; access_log /var/log/nginx/data-access.log combined; location / { proxy_pass http://myservice:8080/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Host $host; } } }
验证修复:
修改配置后重启容器:
docker-compose down && docker-compose up -d
之后访问https://example.com(记得在本地hosts文件中将example.com映射到你的主机IP),就能正常访问myservice的内容了。另外,浏览器弹出的自签名证书警告是开发环境的正常现象,你可以选择跳过警告继续访问。
内容的提问来源于stack exchange,提问作者mzbaran
相关产品推荐
相关产品推荐

