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

Docker容器内Nginx配置出现502 Bad Gateway问题排查求助

问题排查思路(502 Bad Gateway 原因分析)

当前环境:

  • 两个Docker容器:Angular+Nginx(监听4200)、Spring Boot+PostgreSQL(监听8080)
  • 已配置Certbot SSL证书,容器运行正常,但访问页面出现502错误

以下是可能的原因及排查方向:

  • Docker容器网络隔离问题
    Docker容器默认有独立的网络栈,你在Nginx容器里用localhost指向的是容器自身,不是宿主机或Spring Boot容器。如果两个容器没在同一个自定义网络里,Nginx根本找不到后端服务。
    排查:

    1. 执行docker network ls查看容器所在网络,确保两个容器在同一自定义网络(比如提前创建的app-network)
    2. 改用容器名称或容器IP作为proxy_pass目标,比如proxy_pass http://spring-boot-container:8080;(容器名称需在启动时用--name指定)
  • Spring Boot端口映射或服务绑定地址错误
    如果Spring Boot容器没把8080端口映射到宿主机,或者服务只绑定了127.0.0.1,外部(包括Nginx容器)都无法访问。
    排查:

    1. 执行docker ps查看Spring Boot容器的PORTS列,确认存在0.0.0.0:8080->8080/tcp这类端口映射
    2. 查看Spring Boot启动日志,确认服务绑定地址是0.0.0.0(日志会显示类似Started Tomcat on port(s): 8080 (http) with address 0.0.0.0),如果是127.0.0.1,需在启动参数中添加--server.address=0.0.0.0或修改application配置文件
  • Nginx反向代理语法错误
    proxy_pass必须带协议头,若写成proxy_pass localhost:8080;会被Nginx识别为本地文件路径,直接导致502。必须写完整格式:http://目标地址:端口,比如proxy_pass http://172.17.0.3:8080;(容器IP)或http://spring-boot-service:8080;(Docker服务名)

  • 防火墙/安全组拦截
    VPS的系统防火墙(如ufw、firewalld)或云服务商的安全组,可能拦截了容器间通信,或未开放80/443端口供外部访问。
    排查:

    1. 临时关闭防火墙测试,看是否恢复正常
    2. 检查安全组规则,确保入站方向允许80、443端口,且容器所在网段(如172.17.0.0/16)的通信不受限制
  • Certbot配置覆盖反向代理规则
    Certbot自动生成的SSL配置可能覆盖了你自定义的location规则,导致反向代理未生效。
    排查:
    查看Nginx站点配置文件(如/etc/nginx/sites-available/your-domain.conf),确认反向代理的location块在SSL配置块内,且未被注释或覆盖

内容的提问来源于stack exchange,提问作者ЗЛАТЕН

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:00:10