# 502 Bad Gateway 错误排查指南 ## 错误说明 `502 Bad Gateway` 表示 Nginx 无法连接到后端服务。通常是因为: 1. **后端服务未启动** 2. **Nginx配置中的端口不正确**(最常见) 3. **后端服务启动失败** 4. **防火墙阻止连接** ## 排查步骤 ### 1. 检查后端服务是否启动 在服务器上执行: ```bash # 检查18082端口是否在监听 netstat -tlnp | grep 18082 # 或 ss -tlnp | grep 18082 # 检查Java进程 ps aux | grep java # 或 jps -l ``` **如果端口没有监听:** - 后端服务没有启动 - 需要启动后端服务 ### 2. 检查Nginx配置(最重要) 在宝塔面板中: 1. 网站 → 设置 → 配置文件 2. 找到 `location /api/` 配置块 3. **确认 `proxy_pass` 端口是 `18082`** **正确的配置:** ```nginx 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):** ```nginx location /api/ { proxy_pass http://127.0.0.1:8082; # ← 错误:端口还是8082 ... } ``` **修改后必须:** 1. 点击"保存" 2. 点击"重载配置"或"重启Nginx" ### 3. 测试后端服务是否正常 在服务器上执行: ```bash # 测试后端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` 端口 - 是否有错误信息 ```bash # 如果使用nohup启动 tail -f app.log # 或查看Spring Boot启动日志 # 应该看到类似信息: # Tomcat started on port(s): 18082 (http) ``` ### 5. 检查防火墙 在宝塔面板中: 1. 安全 → 防火墙 2. 确认端口 `18082` 已开放(如果后端需要外部访问) 3. **注意:** 如果后端只监听 `127.0.0.1`,不需要开放防火墙 ### 6. 检查后端监听地址 确认后端配置: **application-dev.yml:** ```yaml 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:确认后端服务已启动 ```bash # 在服务器上执行 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配置 在宝塔面板中修改配置文件: ```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 在宝塔面板中: 1. 保存配置 2. 重载配置 ### 步骤4:验证 ```bash # 在服务器上测试 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配置已保存并重载 - [ ] 防火墙已开放(如果需要) - [ ] 后端启动日志无错误 ## 如果还是无法解决 1. **查看Nginx错误日志** ```bash tail -f /www/wwwlogs/175.178.252.59.error.log ``` 2. **查看后端启动日志** ```bash tail -f app.log ``` 3. **检查端口占用** ```bash netstat -tlnp | grep 18082 ``` 4. **测试后端直接访问** ```bash curl http://127.0.0.1:18082/api/health ```