fsys — 静态文件托管服务 (C++20)
基于 libhttp + libmsg 的 C++20 静态文件托管与前端页面服务,监听 127.0.0.1:9200。
Python/Flask static 模块的生产级 C++ 重写,前端零改动兼容(改进性差异:上游状态码透传使前端 401 跳转首次生效,详见审计报告 D-1)。
架构
路由
核心路由
| 路径 |
说明 |
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 |
运行
依赖
libhttp, libmsg, boost::json, OpenSSL, libcurl
许可证
MIT License