- 添加502 Bad Gateway错误排查指南文档 - 移除旧的端口修改指南文档 - 提供完整的错误排查步骤和解决方案 - 包含Nginx配置检查和后端服务验证流程 - 添加快速修复步骤和常见问题处理 - 移除过时的端口变更操作说明
4.9 KiB
4.9 KiB
502 Bad Gateway 错误排查指南
错误说明
502 Bad Gateway 表示 Nginx 无法连接到后端服务。通常是因为:
- 后端服务未启动
- Nginx配置中的端口不正确(最常见)
- 后端服务启动失败
- 防火墙阻止连接
排查步骤
1. 检查后端服务是否启动
在服务器上执行:
# 检查18082端口是否在监听
netstat -tlnp | grep 18082
# 或
ss -tlnp | grep 18082
# 检查Java进程
ps aux | grep java
# 或
jps -l
如果端口没有监听:
- 后端服务没有启动
- 需要启动后端服务
2. 检查Nginx配置(最重要)
在宝塔面板中:
- 网站 → 设置 → 配置文件
- 找到
location /api/配置块 - 确认
proxy_pass端口是18082
正确的配置:
location /api/ {
proxy_pass http://127.0.0.1:18082; # ← 必须是18082,不是8082
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
错误的配置(会导致502):
location /api/ {
proxy_pass http://127.0.0.1:8082; # ← 错误:端口还是8082
...
}
修改后必须:
- 点击"保存"
- 点击"重载配置"或"重启Nginx"
3. 测试后端服务是否正常
在服务器上执行:
# 测试后端API是否可访问
curl http://127.0.0.1:18082/api/health
# 或
curl http://127.0.0.1:18082/api/erp/user/login -X POST -H "Content-Type: application/json" -d '{"username":"test","password":"test"}'
如果返回连接拒绝:
- 后端服务没有启动
- 检查启动日志
如果返回正常响应:
- 后端服务正常
- 问题在Nginx配置
4. 检查后端启动日志
查看后端启动日志,确认:
- 服务是否成功启动
- 是否监听在
18082端口 - 是否有错误信息
# 如果使用nohup启动
tail -f app.log
# 或查看Spring Boot启动日志
# 应该看到类似信息:
# Tomcat started on port(s): 18082 (http)
5. 检查防火墙
在宝塔面板中:
- 安全 → 防火墙
- 确认端口
18082已开放(如果后端需要外部访问) - 注意: 如果后端只监听
127.0.0.1,不需要开放防火墙
6. 检查后端监听地址
确认后端配置:
application-dev.yml:
server:
port: 18082
# 如果没有配置 address,默认监听 0.0.0.0(所有网卡)
# 如果配置了 address: 127.0.0.1,只监听本地
如果后端只监听 127.0.0.1:
- Nginx的
proxy_pass必须使用http://127.0.0.1:18082 - 不能使用
http://175.178.252.59:18082
快速修复步骤
步骤1:确认后端服务已启动
# 在服务器上执行
java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
# 或后台运行
nohup java -jar mt-startup-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > app.log 2>&1 &
步骤2:修改Nginx配置
在宝塔面板中修改配置文件:
location /api/ {
proxy_pass http://127.0.0.1:18082; # 确保是18082
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
步骤3:重载Nginx
在宝塔面板中:
- 保存配置
- 重载配置
步骤4:验证
# 在服务器上测试
curl http://127.0.0.1/api/erp/user/login -X POST -H "Content-Type: application/json" -d '{"username":"test","password":"test"}'
常见问题
Q1: 修改了Nginx配置,但还是502?
A: 检查是否:
- 保存了配置
- 重载了Nginx(不是只保存)
- 确认端口是
18082,不是8082
Q2: 后端服务启动了,但Nginx还是502?
A: 检查:
- Nginx配置中的端口是否正确
- 后端是否真的在
18082端口监听 - Nginx错误日志:
/www/wwwlogs/175.178.252.59.error.log
Q3: 如何查看Nginx错误日志?
A: 在宝塔面板中:
- 网站 → 日志 → 错误日志
- 或直接查看:
/www/wwwlogs/175.178.252.59.error.log
查看是否有类似错误:
connect() failed (111: Connection refused) while connecting to upstream
这表示无法连接到后端。
验证清单
- 后端服务已启动
- 后端监听在
18082端口 - Nginx配置中
proxy_pass端口是18082 - Nginx配置已保存并重载
- 防火墙已开放(如果需要)
- 后端启动日志无错误
如果还是无法解决
-
查看Nginx错误日志
tail -f /www/wwwlogs/175.178.252.59.error.log -
查看后端启动日志
tail -f app.log -
检查端口占用
netstat -tlnp | grep 18082 -
测试后端直接访问
curl http://127.0.0.1:18082/api/health