Files
blackbird/fsys/README.md
T
qing 175fa5d244 refactor(fsys): 移除遗留死接口与快捷登录入口
删除无调用方的 /api/check_user(Users 无 email 列,生产恒 500)与
/api/hash(前端早改直传密码给 ca,无鉴权 SHA-256 端点徒增哈希预言机
风险),连带清理 _rpc/_call_db/FsysExp/sha256_hex/限速设施等失去唯一
使用方的死代码;login.html 移除 yhdet 快捷登录按钮及"或"分隔线
(fsys 无 /yhdet_callback,入口本就失效)。同步两处 README。
2026-08-13 08:08:01 +08:00

99 lines
3.4 KiB
Markdown
Raw 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.
# fsys — 静态文件托管服务 (C++20)
基于 libhttp + libmsg 的 C++20 静态文件托管与前端页面服务,监听 `127.0.0.1:9200`。
Python/Flask `static` 模块的生产级 C++ 重写,前端零改动兼容(改进性差异:上游状态码透传使前端 401 跳转首次生效,详见审计报告 D-1)。
## 架构
```
waf :443 (TLS 终止 + 安全规则)
│
▼
ca :8443 (认证 + 身份头注入 + 前置转发)
│
▼
gateway :8445 (纯转发反向代理, 仅 loopback)
│
▼
fsys :9200 (libhttp 异步多线程 + CORS)
│
├── public/ 静态文件根目录
├── dnfs2 :8006 笔记代理(反向代理)
├── db2 :8005 日志写入
└── (配置纯 CLI 传递,不依赖 confs)
```
## 路由
### 核心路由
| 路径 | 说明 |
|------|------|
| `GET /` | 首页(优先 index.html,回退 __view.html) |
| `GET /*` | 静态文件 / 目录浏览 |
| `GET /api/filelist?path=` | JSON 文件列表,过滤 `__` 前缀系统文件 |
| `GET /video/*` | 视频/音频流媒体(HTTP Range 206 分段) |
| `GET /health` | 健康检查 |
### 内部工具路由
| 路径 | 说明 |
|------|------|
| `GET /api/favicon?url=` | favicon SSRF 防护代理(512KB 上限,仅浏览器侧 Cache-Control 缓存 1 天,无服务端缓存) |
### dnfs2 代理路由
| 路径 | 说明 |
|------|------|
| `POST /get_notes` | 获取树状笔记列表(代理至 dnfs2:8006) |
| `POST /add_note` | 新增笔记(代理至 dnfs2:8006) |
| `POST /delete_note` | 删除笔记(代理至 dnfs2:8006) |
| `POST /update_note` | 更新笔记(代理至 dnfs2:8006) |
支持 HttpOnly Cookie 模式:`q4_token` Cookie 自动转为 `Authorization: Bearer` 头。
## 配置
纯 CLI + 环境变量 + 默认值(CLI > 环境变量 > 默认值),不依赖 confs;原 `static.ini` 各值已迁入 `core/services.yaml` 的 fsys 条目 args。
| 配置项 | CLI 参数 | 环境变量 | 默认值 |
|---------|---------|----------|--------|
| 监听地址 | `--addr` / `-a` | `LISTEN_ADDR` | 127.0.0.1 |
| 监听端口 | `--port` / `-p` | `LISTEN_PORT` | 9200 |
| 工作线程数 | `--threads` / `-t` | — | 4 |
| 静态根目录 | `--root` | `STATIC_ROOT` | ./public |
| TLS 开关 | `--ssl-enabled` | — | false |
| 证书 / 私钥 | `--cert-file` / `--key-file` | — | cert.pem / key.pem |
| CORS 白名单 | `--cors-origins` | — | 逗号分隔,必需 |
| db2 地址 | `--db-host` / `--db-port` | `DB_HOST` / `DB_PORT` | 127.0.0.1:8005 |
| dnfs2 上游 | `--dnfs-url` | `DNFS_URL` | http://127.0.0.1:8006 |
| 实例名 / 日志级别 | `--instance` / `--log-level` | — | fsys / info |
## 相比 Python static 的改进
| 改进 | 说明 |
|------|------|
| 请求体大小限制 | `setMaxBodySize(10MB)` 防 OOM |
| SSL 原生支持 | libhttp 构造器直接支持,无需回退开发服务器 |
| 异步 IO | Boost.Beast 异步多线程替代 Flask 同步 |
| 消除 Python 依赖 | 不再需要 venv/pip/Flask/waitress |
| 命令行参数 | 支持 `--addr/-a --port/-p --threads/-t` |
| 数值范围校验 | 所有端口/线程数有严格边界检查 |
| 统一日志配置 | 复用主配置(CLI/环境变量)的 db host/port |
## 运行
```bash
bash _set.sh # 编译
bash _run.sh # 启动
```
## 依赖
libhttp, libmsg, boost::json, OpenSSL, libcurl
## 许可证
MIT License