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

使用Docker化Nginx代理同端口Docker服务遇parser服务访问问题求助

解决方案

问题出在你的Nginx配置是基于域名区分服务(engine.app、parser.app),但你实际是通过服务器IP+路径前缀(/engine、/parser)访问,两者不匹配导致parser服务无法正常路由。

以下是修正后的完整Nginx配置,直接替换原配置即可:

upstream engine.app {
    server engine:8000;
}

upstream parser.app {
    server parser:8000;
}

server {
    listen 80;
    # 用下划线匹配所有访问(包括IP直接访问)
    server_name _;

    # 处理engine服务的路径请求
    location /engine/ {
        # 末尾加斜杠,会把/engine/xxx转发到上游的/xxx
        proxy_pass http://engine.app/;
        proxy_set_header Host "localhost";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
    }

    # 兼容不带末尾斜杠的访问(比如server_ip/engine)
    location = /engine {
        return 301 /engine/;
    }

    # 处理parser服务的路径请求
    location /parser/ {
        # 同样加末尾斜杠,确保路径正确转发
        proxy_pass http://parser.app/;
        proxy_set_header Host "localhost";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
    }

    # 兼容不带末尾斜杠的访问(比如server_ip/parser)
    location = /parser {
        return 301 /parser/;
    }
}

关键修改说明:

  • 合并server块:把原来两个独立的server整合为一个,用server_name _;匹配所有IP/域名访问,符合你用服务器IP直接访问的场景。
  • 路径前缀的正确代理:在proxy_pass末尾添加斜杠/,这样Nginx会把/engine/route1这类请求转发为上游服务的/route1,避免上游收到/engine/route1这种不存在的路径。
  • 兼容无斜杠访问:添加location = /engine和location = /parser的规则,把不带末尾斜杠的请求重定向到带斜杠的路径,避免路径匹配异常。

修改后,你就可以通过server_ip/parser和server_ip/parser/xxx正常访问parser服务了,和engine的访问方式保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:21:05