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

Nginx配置双location代理两个Docker Flask应用时出现502 Bad Gateway错误

问题排查步骤
  • 首先查看Nginx错误日志定位根本原因
    你提供的只有访问日志,502错误的具体诱因会记录在/var/log/nginx/error.log中,常见日志关键词包括connect() failed(连接上游失败)、Connection refused(连接被拒绝)、upstream sent invalid response(上游返回无效响应),先拿到错误日志可以大幅缩小排查范围。
  • 验证上游容器2本身可正常访问
    在Nginx所在的宿主机执行以下命令直接访问容器2的服务,确认服务本身正常:
    # 测试容器IP+端口可连通
    curl -v http://local_ip_of_container_2:8035/xxxx
    
    若该命令无法正常返回响应,说明问题出在容器2本身或者网络层面,和Nginx配置无关:
    1. 检查Flask应用2的启动配置:Flask默认监听127.0.0.1,只能在容器内部访问,启动时必须指定host="0.0.0.0"才能允许容器外访问。
    2. 确认容器2的IP未发生变化:Docker容器重启后默认会重新分配IP,执行docker inspect <容器2的名称或ID> | grep IPAddress核对当前IP和Nginx upstream配置中的local_ip_of_container_2是否一致。
    3. 检查网络策略与防火墙:确认宿主机的iptables、安全组规则没有限制Nginx访问容器2的8035端口,同时确认Nginx和容器2处于同一个可互通的Docker网络中。
  • 修正Nginx路径转发配置(可选,适用于Flask应用2无/admin前缀路由的场景)
    你当前的location /admin/配置中proxy_pass末尾没有加斜杠,会把完整的原始路径转发给上游:比如请求/admin/xxxx会被转发为http://container2_name/admin/xxxx。如果你的Flask应用2的路由没有/admin前缀,需要将配置修改为:
    location  /admin/ {
        proxy_pass    http://container2_name/;
        # 建议补充和根路径一样的proxy_set_header配置,避免Flask拿到异常的请求头
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
    }
    
    末尾的斜杠会让Nginx把/admin/前缀替换成/再转发,此时请求/admin/xxxx会被转发为http://container2_name/xxxx,适配没有前缀的Flask路由。
  • 查看容器2的运行日志
    如果前面的curl命令已经能正常拿到响应,但走Nginx还是502,查看容器2的日志确认请求是否已经进入容器,是否有应用层面的报错导致返回了Nginx无法识别的响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:27:04