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
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
# 公网反代(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`、验证逻辑复用部署链路的探测段。
|
||||
Reference in New Issue
Block a user