You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:57:41