Files
blackbird/fsys/README.md
T

114 lines
3.6 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 终止 + 安全规则)
│
▼
gateway :8443 (反向代理 + 认证)
│
▼
fsys :9200 (libhttp 异步多线程 + CORS)
│
├── public/ 静态文件根目录
├── dnfs2 :8006 笔记代理(反向代理)
├── db2 :8005 用户查询 + 日志写入
└── confs :8010 配置拉取
```
## 路由
### 核心路由
| 路径 | 说明 |
|------|------|
| `GET /` | 首页(优先 index.html,回退 __view.html) |
| `GET /*` | 静态文件 / 目录浏览 |
| `GET /api/filelist?path=` | JSON 文件列表,过滤 `__` 前缀系统文件 |
| `GET /video/*` | 视频/音频流媒体(HTTP Range 206 分段) |
| `GET /health` | 健康检查 |
### 内部工具路由
| 路径 | 说明 |
|------|------|
| `POST /api/hash` | SHA-256 密码哈希(限速 20/min/IP) |
| `POST /api/check_user` | 检查用户是否已注册(限速 10/min/IP) |
| `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` 头。
## 配置
与 `static` 模块完全兼容,使用相同的 `static.ini`(由 confs 服务分发)。
| Section | Key | 说明 |
|---------|-----|------|
| `[server]` | `host` | 监听地址(默认 127.0.0.1) |
| `[server]` | `port` | 监听端口(默认 9200) |
| `[directory]` | `root` | 静态文件根目录(相对路径基于工作目录,_run.sh 以模块目录启动) |
| `[ssl]` | `enabled` | TLS 开关(默认 false) |
| `[ssl]` | `cert_file` | 证书路径 |
| `[ssl]` | `key_file` | 私钥路径 |
| `[cors]` | `allowed_origins` | CORS 白名单,逗号分隔 |
### 环境变量
| 变量 | 说明 |
|------|------|
| `LISTEN_ADDR` | 覆盖监听地址 |
| `LISTEN_PORT` | 覆盖监听端口 |
| `STATIC_ROOT` | 覆盖静态文件根目录 |
| `DB_HOST` / `DB_PORT` | 覆盖 db 服务地址 |
| `DNFS_URL` | 覆盖 dnfs2 上游地址 |
| `CONFS_HOST` / `CONFS_PORT` | 覆盖 confs 引导地址 |
### 命令行参数
| 参数 | 说明 |
|------|------|
| `--addr` / `-a` | 监听地址 |
| `--port` / `-p` | 监听端口 |
| `--threads` / `-t` | 工作线程数 |
## 相比 Python static 的改进
| 改进 | 说明 |
|------|------|
| 请求体大小限制 | `setMaxBodySize(10MB)` 防 OOM |
| SSL 原生支持 | libhttp 构造器直接支持,无需回退开发服务器 |
| 异步 IO | Boost.Beast 异步多线程替代 Flask 同步 |
| 消除 Python 依赖 | 不再需要 venv/pip/Flask/waitress |
| 命令行参数 | 支持 `--addr/-a --port/-p --threads/-t` |
| 数值范围校验 | 所有端口/线程数有严格边界检查 |
| 统一日志配置 | 复用主配置 confs 拉取的 db host/port |
## 运行
```bash
bash _set.sh # 编译
bash _run.sh # 启动
```
## 依赖
libhttp, libmsg, boost::json, OpenSSL, libcurl
## 许可证
MIT License