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

Ubuntu Server下NGINX代理Docker部署的Spring Boot应用遇502错误求助

解决NGINX反向代理Docker Spring Boot应用的502错误及端口冲突问题

先处理端口冲突(错误98: Address already in use)

  • 日志里的bind() to 0.0.0.0:8090 failed (98)是因为8090端口已被占用——你用docker run -d -p 8090:80 backend已经把宿主机8090端口映射给了Docker容器,此时若NGINX配置里有监听8090的规则,就会触发冲突。
  • 排查所有NGINX配置文件:
    grep -r "listen 8090" /etc/nginx
    
    若找到相关监听规则,要么删除该规则,要么修改Docker映射端口为未被占用的端口(比如8091):
    docker stop <容器ID>
    docker rm <容器ID>
    docker run -d -p 8091:80 backend
    

解决502 Bad Gateway错误

1. 确保Spring Boot应用监听0.0.0.0

Docker容器内的应用如果仅监听localhost(127.0.0.1),宿主机即使映射了端口也无法访问。必须让应用监听0.0.0.0:

  • 启动命令添加参数:
    java -jar your-app.jar --server.address=0.0.0.0
    
  • 或在配置文件application.properties/application.yml中设置:
    server.address=0.0.0.0
    server.port=80
    
    配置完成后重新构建镜像并运行。

2. 验证宿主机与容器端口的连通性

在宿主机执行:

curl http://localhost:8090

若仍报错,检查容器状态:

docker ps

确认容器状态为Up,再查看容器内应用是否监听80端口:

docker exec <容器ID> netstat -tulpn | grep 80

若没有监听记录,说明应用启动异常,重新查看Docker日志排查:

docker logs <容器ID>

3. 修正NGINX反向代理配置

如果宿主机能直接访问localhost:8090,但NGINX代理仍返回502:

  • 确认配置文件已软链接到sites-enabled目录:
    ln -s /etc/nginx/sites-available/backend.conf /etc/nginx/sites-enabled/
    
  • 测试NGINX配置合法性:
    nginx -t
    
    根据提示修正错误后,重启NGINX:
    systemctl restart nginx
    
  • 注意server_name配置要匹配你的实际域名,比如用mydomain的话,需改为:server_name mydomain;,支持多域名的话可写为:server_name example.com mydomain;

4. 确认防火墙规则生效

检查ufw规则是否正确开放了端口:

ufw status

确保80/tcp和8090/tcp(或你修改后的端口)处于允许状态,若没有则重新添加:

ufw allow 80/tcp
ufw allow 8090/tcp
ufw reload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:50:28