Files
-Fonu/docs/agent-proxy-roadmap.md
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

164 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 公网反代(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 自动做一次真实探测并把结果返回给页面:
```text
在 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 行。
- 成本:低。
---
## 建议路线
```text
第一批(1-2 天):① 部署后在线验证 + ③ 状态徽章实时化 + ⑥ WebSocket 开关
→ 直接消灭「部署成功但不通」的灰区
第二批(2-3 天):② 配置查看/自定义 + ④ 强制跳转 + ⑤ 访问控制
→ 反代层能力追平本地反代
第三批(按需):⑦⑧⑨⑩⑪⑫
```
## 附:接口草案(第一/二批共用)
```text
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`、验证逻辑复用部署链路的探测段。