Ubuntu环境下Spring Boot+React+Nginx部署连接失败求助
解决Nginx反向代理Spring Boot出现502 Bad Gateway的问题
核心问题分析
你的Nginx配置将静态资源路由与API代理放在同一个location /下,逻辑冲突,且未验证后端服务的本地可达性,最终导致502错误。
分步解决方案
1. 验证后端服务的本地可达性
先在Ubuntu服务器上执行命令,测试Spring Boot后端是否能正常响应:
curl http://localhost:8000
- 若返回后端正常响应(如API数据或默认页面),说明后端服务无问题,故障出在Nginx配置;
- 若curl失败,检查Spring Boot是否真的在监听8000端口:
确保输出包含ss -tulpn | grep 8000:::8000或127.0.0.1:8000,如果后端绑定的是外部IP而非localhost,需添加启动参数--server.address=0.0.0.0让其监听所有地址。
2. 修正Nginx配置文件
将静态资源与API代理拆分到不同location,避免逻辑冲突。修改/etc/nginx/sites-available/myapp.conf为:
server { listen 80; # 处理React静态资源请求 location / { root /home/build; index index.html index.htm; try_files $uri $uri/ /index.html; } # 处理后端API请求(假设API前缀为/api,可根据实际路径调整) location /api/ { proxy_pass http://localhost:8000/; 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-Proto $scheme; } }
- 注意:如果后端API没有统一前缀,需根据实际请求路径调整location规则,确保静态资源走静态路由,API请求走代理路由。
3. 检查并重启Nginx
先验证Nginx配置合法性:
sudo nginx -t
若提示test is successful,重启Nginx使配置生效:
sudo systemctl restart nginx
4. 排查防火墙(可选)
如果后端绑定的是外部IP而非localhost,检查Ubuntu防火墙是否允许8000端口:
sudo ufw status
若8000端口未开放,执行命令开放:
sudo ufw allow 8000/tcp
内容的提问来源于stack exchange,提问作者LoneDev
相关产品推荐
相关产品推荐

