花萍雨 / Pingyu
← 全部笔记

2026-10-15 后端 502:重启后进程丢失 + 代理拦截 localhost

🌿 持续补充排坑最后更新 2026.10.16#AI修图智能体#排坑

学习笔记,会随着学习继续修改,难免有不完整的地方。

后端 502:重启后进程丢失 + 代理拦截 localhost

卡在哪

前端首页能打开,但访问 /api/health 和登录都报 502 Bad Gateway。

我怎么定位的

  1. 搞清 502 是谁报的

    • 502 是「中间人」报的:Vite(7301)把 /api 转发给后端(7302),没拿到有效回应
    • 对比:500 才是后端自己代码出错
    • → 问题在 Vite 到后端这一段,后端可能根本没收到请求
  2. 看中间人的日志

    • Vite 终端里是 ECONNREFUSED:7302 端口上没有程序在监听

  3. 找后端为什么没在跑

    • 电脑重启过,终端里手动启动的 API、Worker、前端全部随之结束;Docker Desktop 也没启动
    • → 第一层根因:进程丢失
  4. 重新启动 API,又失败了

    • 启动时创建 bucket,报 CreateBucket ... 502 Bad Gateway,Application startup failed

    • 绕过中间环节直连 localhost:7313/health 返回 200 → RustFS 本身没问题
    • 容器就绪后用后端代码重跑建 bucket,仍是 502 → 不是启动顺序问题
    • 又是 502,说明后端和 RustFS 之间也有个「中间人」
  5. 找到这个中间人

    • scutil --proxy:系统代理开着(127.0.0.1:7892),例外列表里有 localhost
    • boto3 会读到系统代理,但不读例外列表,只认 NO_PROXY 环境变量
    • 对照实验:不设 NO_PROXY → 502;设 NO_PROXY=localhost,127.0.0.1 → 成功

根因 & 修复

根因 两层叠加:① 重启电脑后,手动启动的进程全部丢失;② 重启 API 时,boto3 把访问 localhost 的请求送进了系统代理,代理返回 502。

修复:

问题 修复
进程丢失 按 本地启动与重启 重新拉起 Docker、API、Worker、前端
代理拦截 localhost ~/.zshrc 末尾加 export NO_PROXY="localhost,127.0.0.1,::1",新开终端生效(原文件备份在 ~/.zshrc.bak-20261015)

下次我会先做什么

> 一共三个层级:前端 → 后端 → 组件层,一层一层地去排查。 (命令见 故障排查:从上往下查三层;10-15 停掉 API 亲手演练过一遍后写下)