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

Docker Compose中Nginx代理配置问题:localhost/api连接被拒绝

问题分析与解决方案

从错误日志可以明确两个核心问题:

nginx | 2023/06/01 21:57:50 [error] 31#31: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.26.0.1, server: , request: "GET /api HTTP/1.1", upstream: "http://172.26.0.4:4000/api", host: "localhost"

  • Nginx未按预期转发路径:配置中proxy_pass http://backend-stream/应该将/api路径替换为后端服务的根路径,但日志显示请求仍被转发到http://xxx:4000/api
  • Backend服务连接失败:4000端口被拒绝,说明服务未正常启动或未在该端口监听

1. 修正Nginx代理配置

方案A:调整路径转发逻辑

修改default.conf中的/api location块,确保路径正确重写:

upstream jenkins-stream {
    server jenkins:8080;
}

upstream backend-stream {
    server backend:4000;
}

server {
    listen 80;
    listen [::]:80;

    location /jenkins {
        proxy_pass http://jenkins-stream/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    location /api {
        proxy_pass http://backend-stream;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # 重写路径,将/api前缀移除后转发到后端
        rewrite ^/api/(.*)$ /$1 break;
    }
}

方案B:简化配置(无需upstream时)

如果不需要负载均衡,直接指定后端地址并确保路径转发:

server {
    listen 80;
    listen [::]:80;

    location /jenkins {
        proxy_pass http://jenkins:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    location /api {
        proxy_pass http://backend:4000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2. 检查Backend服务状态

  • 查看服务日志,确认启动是否正常:
    docker logs backend
    
  • 检查端口监听,确认服务在4000端口运行:
    docker exec -it backend netstat -tulpn | grep 4000
    
  • 添加重启策略:由于depends_on仅保证容器启动顺序,MongoDB初始化可能滞后,给Backend添加自动重启:
    在docker-compose.yml的backend服务块中加入:
    restart: unless-stopped
    

3. 验证网络连通性

在Nginx容器内测试能否访问Backend服务:

# 测试域名解析
docker exec -it nginx ping backend
# 测试端口连通性
docker exec -it nginx curl http://backend:4000

4. 重新部署服务

修改配置后重启所有服务:

docker-compose down
docker-compose up -d

完成后访问localhost/api验证Backend代理,访问localhost/jenkins验证Jenkins代理是否正常。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:45:32