# 🔧 502 Bad Gateway 错误解决方案 ## ❓ 问题描述 访问 https://dmp.ink1ing.tech 时出现: ``` Bad gateway Error code 502 ``` ## �� 根本原因 **Node.js 服务器进程崩溃或停止了** Cloudflare Tunnel 正常运行,但本地服务器(localhost:3456)无法访问,导致 Tunnel 无法转发请求。 --- ## ✅ 已解决 服务已重新启动并恢复正常: - ✅ Node.js 服务器: 运行中 (PID: 93335) - ✅ Cloudflare Tunnel: 已连接 - ✅ 公网访问: https://dmp.ink1ing.tech 正常 --- ## 🔍 为什么会挂? ### 可能的原因 1. **内存不足** - Node.js 进程占用内存过多被系统杀掉 2. **代码错误** - 重新生成数据库时,旧进程可能因为数据库被删除而崩溃 3. **手动停止** - 可能在某个操作中意外停止了进程 4. **系统睡眠** - macOS 进入睡眠后某些进程可能被挂起 --- ## 🛠️ 快速修复方法 ### 方法 1:一键重启(推荐) ```bash cd /Users/inkling/Desktop/dmp ./start-daemon.sh ``` ### 方法 2:完全重启 ```bash cd /Users/inkling/Desktop/dmp ./stop-services.sh ./start-daemon.sh ``` ### 方法 3:健康检查 ```bash cd /Users/inkling/Desktop/dmp ./health-check.sh ``` 如果发现服务未运行,执行方法1重启。 --- ## 🚨 预防措施 ### 1. 进程监控脚本(已创建) 我创建了 `watchdog.sh` 脚本,可以: - 自动检测服务是否崩溃 - 自动重启失败的服务 - 记录监控日志 **使用方法**: ```bash # 手动运行一次检查 ./watchdog.sh # 或设置 cron 定时任务(每5分钟检查一次) # 打开 crontab 编辑器 crontab -e # 添加以下行 */5 * * * * /Users/inkling/Desktop/dmp/watchdog.sh ``` ### 2. 开机自启动 创建 macOS LaunchAgent: ```bash cat > ~/Library/LaunchAgents/com.dmp.service.plist << 'PLIST' Label com.dmp.service ProgramArguments /Users/inkling/Desktop/dmp/start-daemon.sh RunAtLoad KeepAlive SuccessfulExit StandardOutPath /Users/inkling/Desktop/dmp/logs/launchd.log StandardErrorPath /Users/inkling/Desktop/dmp/logs/launchd.error.log PLIST # 加载服务 launchctl load ~/Library/LaunchAgents/com.dmp.service.plist ``` ### 3. 服务器优化 如果频繁崩溃,可以优化 `server.js`: ```javascript // 添加错误处理 process.on('uncaughtException', (err) => { console.error('未捕获的异常:', err); // 不退出进程 }); process.on('unhandledRejection', (reason, promise) => { console.error('未处理的 Promise 拒绝:', reason); }); ``` --- ## 📊 监控和日志 ### 查看日志 ```bash # 服务器日志 tail -f logs/server.log # Tunnel 日志 tail -f logs/tunnel.log # 监控日志 tail -f logs/watchdog.log # 监控日志(如果设置了) tail -f logs/monitor.log ``` ### 检查进程 ```bash # 查看所有相关进程 ps aux | grep -E "node server|cloudflared tunnel" | grep -v grep # 查看进程资源使用 top -pid $(pgrep -f "node server.js") ``` --- ## 🔔 告警通知(高级) 可以配置 watchdog 脚本在服务崩溃时发送通知: ```bash # 在 watchdog.sh 中添加 if ! pgrep -f "node server.js" > /dev/null; then # macOS 通知 osascript -e 'display notification "DMP 服务已崩溃并重启" with title "服务监控"' # 或发送邮件/企业微信/钉钉等 fi ``` --- ## ✅ 验证修复 访问以下地址确认服务正常: - 本地: http://localhost:3456 - 公网: https://dmp.ink1ing.tech 运行健康检查: ```bash ./health-check.sh ``` 应该看到所有检查项都是 ✅ --- ## 📝 故障排查清单 如果仍然出现 502: 1. ✅ 检查本地服务:`curl http://localhost:3456` 2. ✅ 检查进程:`ps aux | grep "node server"` 3. ✅ 检查 Tunnel:`cloudflared tunnel info dmp-tunnel` 4. ✅ 查看日志:`tail -f logs/*.log` 5. ✅ 重启服务:`./start-daemon.sh` 6. ✅ 清除缓存:浏览器 Ctrl+Shift+R 强制刷新 --- 生成时间: $(date)