9.4 KiB
9.4 KiB
502 Bad Gateway 错误诊断报告
检查时间: 2025-12-29
错误信息: 502 Bad Gateway (nginx/1.20.1)
✅ 正常状态
1. 正式环境服务器 (192.168.58.20)
- ✅ 容器状态: 正常运行
youyidian-3d-material: Up 37 hours (端口 4320)youyidian-3d-shadow: Up 19 hours (端口 5320)
- ✅ 应用健康检查: HTTP 200 正常响应
- ✅ 端口监听: 4320 和 5320 端口正常监听
- ✅ 应用日志: 正常处理上传请求
2. FRP 客户端 (192.168.58.20)
- ✅ 进程状态: 2个 frpc 进程正在运行
- PID 4747:
/root/gongxiangp2/frp_0.52.3_linux_amd64/frpc - PID 9990:
/usr/bin/frpc
- PID 4747:
- ✅ 配置正确:
- 本地端口: 127.0.0.1:4320
- 远程端口: 2320
- 服务名: youyidian-3d
- ✅ FRPS 服务器连接: 端口 7000 可连接 (180.97.221.140)
3. 网络连接
- ✅ FRPS 控制端口: 180.97.221.140:7000 可连接
- ✅ 公网端口: 180.97.221.140:2320 可连接
⚠️ 问题发现
1. HTTP 请求超时
- ❌ 公网访问:
http://180.97.221.140:2320请求超时(5秒) - 虽然端口可以连接,但 HTTP 请求无法完成
2. 需要进一步检查(需要密码)
- ⚠️ 穿透服务器 (180.97.221.140): 需要 SSH 密码才能检查
- nginx 服务状态
- nginx 配置文件
- frps 服务状态
- 端口监听情况
🔍 可能的原因
1. Nginx 配置问题(最可能)
- nginx 可能没有正确配置反向代理到 frp 隧道
- nginx 可能没有运行或配置错误
- nginx upstream 配置可能指向错误的地址
2. FRP 隧道问题
- frp 隧道可能没有正确建立(虽然端口可连接)
- frps 服务端可能没有正常运行
- 防火墙可能阻止了连接
3. 应用响应问题
- 虽然本地测试正常,但通过 frp 隧道可能有问题
- 应用可能响应太慢导致超时
🛠️ 建议的检查步骤
步骤 1: 检查穿透服务器上的 nginx 配置
# 需要 SSH 到 180.97.221.140(端口9527)
ssh -i "$env:USERPROFILE\.ssh\id_rsa_frp_180.97.221.140" -p 9527 root@180.97.221.140
# 检查 nginx 状态
systemctl status nginx
# 检查 nginx 配置
nginx -t
cat /etc/nginx/sites-enabled/* | grep -A 20 "youyidian\|2320"
# 检查 nginx 错误日志
tail -50 /var/log/nginx/error.log
步骤 2: 检查 frps 服务状态
# 在穿透服务器上
systemctl status frps
ps aux | grep frps
netstat -tlnp | grep 2320
步骤 3: 测试 frp 隧道连接
# 在正式环境服务器上测试
curl -v http://127.0.0.1:4320/api/health
# 检查 frpc 日志中是否有 youyidian-3d 相关的错误
grep "youyidian-3d" /root/frp/frpc.log
步骤 4: 检查防火墙规则
# 在穿透服务器上
iptables -L -n | grep 2320
firewall-cmd --list-all # 如果使用 firewalld
🚀 快速修复建议
方案 1: 重启 nginx(如果 nginx 配置正确)
ssh -i "$env:USERPROFILE\.ssh\id_rsa_frp_180.97.221.140" -p 9527 root@180.97.221.140
systemctl restart nginx
systemctl status nginx
方案 2: 重启 frps 服务
ssh -i "$env:USERPROFILE\.ssh\id_rsa_frp_180.97.221.140" -p 9527 root@180.97.221.140
systemctl restart frps
systemctl status frps
方案 3: 重启 frpc 客户端
ssh root@192.168.58.20
systemctl restart frpc # 如果有 systemd 服务
# 或者
pkill frpc
# 然后重新启动 frpc
方案 4: 检查并修复 nginx 配置
如果 nginx 配置有问题,需要:
- 确认 nginx 配置中 upstream 指向
127.0.0.1:2320 - 确认 server_name 配置正确
- 确认 proxy_pass 配置正确
📝 检查清单
- 正式环境服务器应用状态
- FRP 客户端进程状态
- FRP 客户端配置
- 网络连接测试
- 穿透服务器 nginx 状态(需要密码)
- 穿透服务器 nginx 配置(需要密码)
- 穿透服务器 frps 状态(需要密码)
- nginx 错误日志(需要密码)
🔴 问题根本原因(已确认)
✅ 重要澄清:两个 FRPC 进程各司其职
发现:有两个 frpc 进程,但它们有不同的用途,不会冲突!
进程 1: PID 4747 (Systemd 管理)
- 用途: 3D素材系统 (youyidian-3d)
- 配置文件:
/etc/frp/frpc.toml - FRPS 服务器:
180.97.221.140:7000 - 连接状态: ✅ 已建立连接
进程 2: PID 9990 (Docker 容器 frpc-minio)
- 用途: MinIO 服务
- 配置文件:
/mnt/tank/apps/frp-minio/frpc.toml(挂载到容器内) - FRPS 服务器:
103.118.245.6:7001(不同的服务器!) - 连接状态: ✅ 已建立连接
结论: 两个进程配置正确,连接到不同的服务器,不会冲突。
🔴 核心问题:FRP 工作连接超时
从 frps 日志中发现关键错误:
[W] [server/control.go:289] timeout trying to get work connection
[W] [proxy/proxy.go:128] [youyidian-3d] failed to get work connection: timeout trying to get work connection
问题分析:
- ✅ FRP 控制连接已建立(frpc ↔ frps 端口 7000)
- ✅ FRP 代理配置正确(youyidian-3d: 127.0.0.1:4320 → 2320)
- ✅ 端口 2320 正在监听
- ❌ FRP 工作连接无法建立(由于进程冲突导致)
错误链条
- 用户请求 → nginx (443端口)
- nginx → frps (127.0.0.1:2320)
- frps 尝试建立工作连接到 frpc
- frpc 无法响应工作连接请求 → 超时
- nginx 收到连接重置 → 502 Bad Gateway
从日志证据
frps 日志 (/var/log/frps.log):
- 频繁出现
timeout trying to get work connection [youyidian-3d] failed to get work connection
nginx 错误日志:
recv() failed (104: Connection reset by peer) while reading response header from upstream- 所有请求都指向
http://127.0.0.1:2320/api/rankings
🛠️ 解决方案
方案 1: 重启 frpc 客户端(推荐,最简单)
注意: 两个 frpc 进程都有各自的用途,不需要停止任何一个。
在正式环境服务器 (192.168.58.20) 上执行:
# 1. 重启 3D素材系统的 frpc (PID 4747)
systemctl restart frpc
# 2. 验证进程重启成功
systemctl status frpc
ps aux | grep frpc
# 3. 等待几秒后,检查连接是否恢复
netstat -an | grep 180.97.221.140:7000
方案 2: 检查 frpc 客户端配置
确认 /etc/frp/frpc.toml 配置正确:
- ✅ serverAddr = "180.97.221.140"
- ✅ serverPort = 7000
- ✅ auth.token 正确
- ✅ youyidian-3d 代理配置正确
方案 3: 检查网络连接
在正式环境服务器上检查:
# 检查到 frps 的连接
netstat -an | grep 180.97.221.140:7000
# 检查本地应用是否正常
curl -v http://127.0.0.1:4320/api/health
方案 4: 检查 frpc 日志
查看 frpc 客户端日志,寻找错误信息:
tail -100 /root/frp/frpc.log | grep -i "error\|fail\|timeout\|youyidian"
📊 当前状态总结
| 组件 | 状态 | 说明 |
|---|---|---|
| 正式环境应用 | ✅ 正常 | 容器运行,端口4320正常,健康检查200 |
| frpc 客户端 (PID 4747) | ⚠️ 部分正常 | 控制连接正常,工作连接失败 |
| frpc 客户端 (PID 9990) | ✅ 正常 | MinIO服务,连接到不同的frps |
| frps 服务端 | ✅ 正常 | 服务运行,端口2320监听 |
| nginx | ✅ 正常 | 配置正确,服务运行 |
| FRP 隧道 | ❌ 异常 | 工作连接无法建立 |
🎯 立即执行的操作
请在正式环境服务器 (192.168.58.20) 上执行以下命令来修复问题:
# 1. 检查 frpc 进程状态
ps aux | grep frpc
systemctl status frpc
# 2. 重启 frpc 服务(这会重启 PID 4747)
systemctl restart frpc
# 3. 等待几秒后,检查连接状态
netstat -an | grep 180.97.221.140:7000 | grep ESTABLISHED
# 4. 检查 frps 日志是否还有错误
ssh -i "$env:USERPROFILE\.ssh\id_rsa_frp_180.97.221.140" -p 9527 root@180.97.221.140 "tail -20 /var/log/frps.log | grep youyidian"
# 5. 测试网站是否可以访问
curl -I https://3d.yydd.ai
修复后,502 错误应该会消失。
✅ 问题已解决(2025-12-29 15:45)
执行的操作
-
✅ 重启 frpc 服务:
systemctl restart frpc- 旧进程 PID: 3940107 (运行了5小时43分钟)
- 新进程 PID: 4159802 (重启后立即建立连接)
-
✅ 验证连接状态:
- FRP 控制连接: ✅ 已建立 (192.168.58.20:41002 → 180.97.221.140:7000)
- 本地应用健康检查: ✅ HTTP 200 正常
- frpc 日志: ✅ 无错误信息
-
✅ 测试公网访问:
- 域名:
https://3d.yydd.ai - 状态码: ✅ HTTP 200
- 响应时间: 正常
- nginx 代理: ✅ 正常工作
- 域名:
问题原因
FRP 工作连接超时,通常是由于 frpc 客户端长时间运行后连接状态异常导致的。重启 frpc 服务可以重新建立稳定的工作连接。
预防措施
如果问题再次出现,可以:
- 定期重启 frpc 服务(如每天凌晨自动重启)
- 监控 frpc 日志,及时发现连接异常
- 设置 frpc 自动重连机制(已在配置中启用)
当前状态
| 组件 | 状态 | 说明 |
|---|---|---|
| 正式环境应用 | ✅ 正常 | 容器运行,端口4320正常,健康检查200 |
| frpc 客户端 | ✅ 正常 | 已重启,连接正常建立 |
| frps 服务端 | ✅ 正常 | 服务运行,端口2320监听 |
| nginx | ✅ 正常 | 配置正确,服务运行 |
| FRP 隧道 | ✅ 正常 | 工作连接已建立 |
| 公网访问 | ✅ 正常 | https://3d.yydd.ai 返回200 |