Files
Havline/docs/agent-proxy-roadmap.md
T
mrlee 278f8267b7 chore: 初始提交 Fonu 1.0.2
- 公网反代:Nginx 状态卡片(版本 / 运行状态 / 配置校验 / 端口监听)
- 部署设置第一、二梯队(HTTPS 开关、安全头、限流、连接数、仅中国大陆 IP)
- 隧道检测兼容 frps v0.68 / v0.71(V2 与旧版端点)
- 恢复被清空的 internal/frp/store.go、internal/api/ddns_handler.go、web/src/views/DdnsView.vue
2026-09-23 09:40:59 +08:00

6.4 KiB
Raw Blame History

公网反代(Agent 页「公网 Nginx 反代」区)功能增强规划

基于实际部署踩坑史(目录探测、证书缺失、端口漂移、类型错配均发生过)梳理, 每项标注:价值 / 实现成本 / 依赖。供后续逐项开发选用。 更新日期:2026-09-21


第一梯队(最推荐先做,1-2 天) 功能 解决什么 ① 部署后在线验证 部署成功后 agent 在 VPS 上 curl -H "Host: 域名" 127.0.0.1:9080,页面直接显示「回源自检 200 ✓」或「回源 502 ✗(隧道未通)」——你昨天遇到的“部署成功但打开 502”当时就能看见断在哪层 ③ 状态徽章实时化 「已部署」升级为「已生效 / 已写入未加载 / 未部署」三态(nginx -T 真实验证),tcp/ 目录那种“写了但不加载”的残留一眼可见 ⑥ WebSocket 开关 家庭影院等实时服务的标配,一个开关 + 模板片段,成本极低 第二梯队(反代能力追平本地反代) ② 配置查看/自定义:每条规则可看生成的 nginx 配置、可改(WebSocket 头、特殊 location 不再需要 SSH)——本地反代已有 auto/custom 模式可直接复用;

④ HTTP 强制跳转 HTTPS、⑤ IP 白名单 / Basic Auth——公网暴露面的安全标配。

第三/四梯队(多规则后有价值) 批量同步、部署历史回滚、域名健康检查面板(含证书剩余天数)、自定义 upstream、流量统计、错误日志快捷查看——文档里都有具体设计。

文档末尾附了配套 API 草案(4 个端点 + agent 侧新增项),实现时按这个走即可。说一声做哪几个,我按第一批开始。

现状回顾(已具备)

  • 手动部署 / 移除单条规则的反代(部署时自动推证书、自动读最新 vhost 端口);
  • VPS 当前已加载路由展示(agentStatus.routes);
  • 反代文件按 fonu-<域名>.conf 写入 Nginx 实际加载目录(-T 试探-验证)。

第一梯队:立刻有用(解决「部署了≠生效」的可见性)

1. 部署后在线验证(强烈推荐,第一个做)

部署成功后 agent 自动做一次真实探测并把结果返回给页面:

在 VPS 上执行:
curl -s -o /dev/null -w "%{http_code}" -H "Host: <域名>" http://127.0.0.1:<vhost端口>
  • 页面显示「部署成功 · 回源自检 200 ✓」或「部署成功 · 但回源 502 ✗(隧道未通)」;
  • 直接区分「反代层 OK / 隧道层断」,消灭"部署成功但打开 502"这类排障;
  • 成本:低(agent 加一个验证步骤 + 前端展示字段)。

2. Nginx 配置内容查看 / 自定义

每条规则提供「查看生成的 nginx 配置」弹窗(对齐本地反代已有的 auto/custom 模式):

  • auto:显示 agent 生成的配置(只读);
  • custom:用户编辑后下发,agent 写入文件并 reload;
  • 排障时可确认「文件里到底写了什么」;特殊需求(WebSocket 头、自定义 location、缓存策略)不再需要 SSH;
  • 成本:中(agent 加 GET/PUT conf 接口;本地反代的 nginx_config.go 模式可直接复用)。

3. 反代状态徽章的实时化

「已部署 / 未部署」目前基于 routes 文件名推断,升级为真实状态:

  • 检查文件存在 ✓ + nginx -t 通过 ✓ + 域名出现在 nginx -T ✓ → 「已生效」;
  • 文件在但 nginx -T 没有它 → 「已写入未加载」(目录不对的残留场景);
  • 成本:低。

第二梯队:安全与可控性(公网暴露面的标配)

4. 一键 HTTPS 强制跳转

生成的配置加一段 80 → 443 的 301 redirect(现在 http 和 443 是两个平行的 server)。

  • 表单按规则勾选「HTTP 跳转 HTTPS」;
  • 成本:低。

5. 访问控制(IP 白名单 / Basic Auth)

公网服务(尤其路由器/摄像头等敏感入口)的标配:

  • IP 白名单:allow x.x.x.x; deny all; 列表来自表单;
  • Basic Auth:agent 生成 htpasswd 并在 location 中引用;
  • 成本:中。

6. WebSocket 支持开关

生成配置追加 proxy_set_header Upgrade $http_upgrade; Connection "upgrade";(群晖/家庭影院等实时服务需要)。

  • 成本:低(一个开关 + 模板片段)。

第三梯队:运维效率(多规则后才有价值)

7. 批量部署 / 全部同步

「一键同步全部规则」:对当前服务端所有候选规则循环部署,展示每条的成败。 配合规则增删后的批量重建场景。

  • 成本:低-中。

8. 部署历史与回滚

每次部署在 agent 侧留 fonu-<域名>.conf.bak-<时间戳>(保留最近 N 份), 页面提供「查看历史 / 回滚到此版本」。

  • 误操作(比如改坏了 upstream)30 秒恢复;
  • 成本:中。

9. 域名健康检查面板

页面顶部一行:每个已部署域名的公网可达性(HTTPS 状态码 + 证书剩余天数), 由 Fonu 侧定时探测(复用服务端诊断的 TTL 缓存模式)。

  • 证书临期/隧道断链主动可见;
  • 成本:中。

第四梯队:锦上添花

10. 自定义 upstream 覆盖

允许某条规则的反代目标不跟随穿透规则(例如指向本机 Nginx:80 做二次分流), 默认仍自动取穿透规则的 vhost 回源。

  • 成本:低。

11. 流量统计接入

frps dashboard 已有连接数/流量数据(Fonu 正在拉取),按域名聚合展示到反代列表, 可见每条反代的实际使用量。

  • 成本:中。

12. Nginx 错误日志快捷查看

agent 提供 tail /www/wwwlogs/<域名>.error.log,规则行内展开最近 20 行。

  • 成本:低。

建议路线

第一批(1-2 天):① 部署后在线验证 + ③ 状态徽章实时化 + ⑥ WebSocket 开关
        → 直接消灭「部署成功但不通」的灰区
第二批(2-3 天):② 配置查看/自定义 + ④ 强制跳转 + ⑤ 访问控制
        → 反代层能力追平本地反代
第三批(按需):⑦⑧⑨⑩⑪⑫

附:接口草案(第一/二批共用)

GET  /api/frpmulti/servers/{id}/agent/routes/{proxyID}/conf     # 查看生成配置
PUT  /api/frpmulti/servers/{id}/agent/routes/{proxyID}/conf     # 自定义配置下发
POST /api/frpmulti/servers/{id}/agent/routes/{proxyID}/verify   # 部署后在线验证
POST /api/frpmulti/servers/{id}/agent/routes/batch              # 批量同步

agent 侧新增:GET/PUT /api/v1/routes/{domain}/conf、验证逻辑复用部署链路的探测段。