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配置文件:
若找到相关监听规则,要么删除该规则,要么修改Docker映射端口为未被占用的端口(比如8091):grep -r "listen 8090" /etc/nginxdocker 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:nginx -tsystemctl 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
相关产品推荐
相关产品推荐

