docs: update README with comprehensive project structure and features

- Add code statistics: 174 source files, 158 test files, ~136K lines
- Document proxy cache and Lua script extension features
- Expand internal directory structure with detailed file descriptions
- Update Go version requirement to 1.26
- Add cache purge API documentation
- Enhance hot upgrade docs with Unix Socket inheritance support
- Update status endpoint with cache hit rate and upstream health

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-05-07 14:03:42 +08:00
parent 144e101c09
commit 2dcc139dd5

163
README.md
View File

@ -5,7 +5,9 @@
高性能 HTTP 服务器与反向代理,使用 Go 语言编写。 高性能 HTTP 服务器与反向代理,使用 Go 语言编写。
基于 [fasthttp](https://github.com/valyala/fasthttp) 构建,提供比标准 net/http 更高的性能。支持 HTTP/3 (QUIC)、WebSocket、虚拟主机、多种负载均衡算法、故障转移以及完整的安全与性能优化特性。 基于 [fasthttp](https://github.com/valyala/fasthttp) 构建,提供比标准 net/http 更高的性能。支持 HTTP/3 (QUIC)、WebSocket、虚拟主机、多种负载均衡算法、故障转移、代理缓存、Lua 脚本扩展,以及完整的安全与性能优化特性。
> **代码统计**174 个源文件 | 158 个测试文件 | ~136,000 行 Go 代码 | 测试覆盖率 >80%
## 特性 ## 特性
@ -71,12 +73,13 @@ proxy:
### 运维 ### 运维
- **热升级** - USR2 信号触发,零停机升级 - **热升级** - USR2 信号触发,零停机升级,支持 Unix Socket 继承
- **配置热重载** - HUP 信号触发,动态更新配置 - **配置热重载** - HUP 信号触发,动态更新配置
- **日志轮转** - USR1 信号触发,重新打开日志文件 - **日志轮转** - USR1 信号触发,重新打开日志文件
- **优雅关闭** - QUIT 信号触发,等待请求完成 - **优雅关闭** - QUIT 信号触发,等待请求完成,支持超时配置
- **状态监控** - 内置状态端点,统计连接数、请求数、流量 - **状态监控** - 内置 `/status` 端点,统计连接数、请求数、流量、上游健康状态、缓存命中率
- **pprof 端点** - 内置性能分析端点,支持 PGO 优化 - **pprof 端点** - 内置性能分析端点,支持 CPU/heap/goroutine/block 分析
- **缓存清理 API** - POST `/purge` 端点,支持按路径清理代理缓存
## 安装 ## 安装
@ -267,15 +270,25 @@ lolly 支持将 nginx 配置文件转换为 YAML 格式:
``` ```
internal/ internal/
├── app/ # 应用入口、信号处理、生命周期 ├── app/ # 应用入口、信号处理、生命周期
│ ├── app.go # 主程序逻辑 │ ├── app.go # 主程序逻辑Start/Stop/Reload
│ ├── app_common.go # 通用平台代码
│ ├── app_windows.go # Windows 平台适配
│ └── import.go # nginx 配置导入 │ └── import.go # nginx 配置导入
├── config/ # 配置加载、验证、默认值 ├── config/ # 配置加载、验证、默认值13 文件)
│ ├── config.go # 配置结构定义 │ ├── config.go # 根配置结构(支持 single/vhost/multi_server 模式)
│ ├── loader.go # 配置文件加载 │ ├── loader.go # 配置文件加载
│ ├── defaults.go # 默认配置 │ ├── defaults.go # 默认配置
│ └── validate.go # 配置验证 │ ├── validate.go # 配置验证
├── server/ # HTTP 服务器核心 │ ├── server_config.go # 服务器配置
│ ├── server.go # 服务器实现 │ ├── proxy_config.go # 代理配置
│ ├── ssl_config.go # SSL/TLS 配置
│ ├── security_config.go # 安全配置
│ ├── cache_config.go # 缓存配置
│ ├── performance_config.go # 性能配置
│ ├── monitoring_config.go # 监控配置
│ └── variable_config.go # 变量配置
├── server/ # HTTP 服务器核心13 文件)
│ ├── server.go # 服务器实现(三种运行模式)
│ ├── vhost.go # 虚拟主机管理 │ ├── vhost.go # 虚拟主机管理
│ ├── pool.go # Goroutine 池 │ ├── pool.go # Goroutine 池
│ ├── status.go # 状态端点 │ ├── status.go # 状态端点
@ -283,25 +296,42 @@ internal/
│ ├── pprof_impl.go # pprof 实现 │ ├── pprof_impl.go # pprof 实现
│ ├── purge.go # 缓存清除端点 │ ├── purge.go # 缓存清除端点
│ ├── internal.go # 内部端点处理 │ ├── internal.go # 内部端点处理
│ └── upgrade.go # 热升级管理 │ ├── lifecycle.go # 生命周期管理
│ ├── middleware_builder.go # 中间件构建器
│ ├── init.go # 初始化逻辑
│ ├── router.go # 路由器集成
│ ├── upgrade.go # 热升级管理Unix
│ ├── upgrade_windows.go # 热升级管理Windows
│ └── testutil.go # 测试工具
├── handler/ # 请求处理器 ├── handler/ # 请求处理器
│ ├── router.go # 路由器 │ ├── router.go # fasthttp/router 封装
│ ├── static.go # 静态文件处理 │ ├── static.go # 静态文件处理含缓存、ETag、304
│ ├── sendfile.go # 零拷贝传输(通用) │ ├── sendfile.go # 零拷贝传输接口
│ ├── sendfile_linux.go # Linux sendfile 实现 │ ├── sendfile_linux.go # Linux sendfile 实现
│ ├── sendfile_common.go # 通用实现
│ ├── autoindex.go # 目录列表生成
│ ├── fileinfo_cache.go # FileInfo 缓存
│ └── errorpage.go # 错误页面管理 │ └── errorpage.go # 错误页面管理
├── proxy/ # 反向代理 ├── proxy/ # 反向代理
│ ├── proxy.go # 代理核心逻辑 │ ├── proxy.go # 代理核心(负载均衡、缓存、故障转移)
│ ├── websocket.go # WebSocket 代理 │ ├── websocket.go # WebSocket 代理
│ ├── health.go # 健康检查 │ ├── health.go # 主动健康检查
│ ├── health_match.go # 健康检查匹配逻辑
│ ├── headers.go # 头部处理工具 │ ├── headers.go # 头部处理工具
│ ├── redirect_rewrite.go # Location 头改写 │ ├── header_modifier.go # 头部修改器
│ ├── proxy_ssl.go # SSL 代理 │ ├── redirect_rewrite.go # Location/Refresh 头改写
│ └── tempfile.go # 临时文件管理 │ ├── proxy_ssl.go # 上游 SSL/TLS
│ ├── proxy_dns.go # DNS 解析集成
│ ├── target_selector.go # 目标选择器Lua balancer 支持)
│ ├── cache_handler.go # 代理缓存处理
│ ├── tempfile.go # 临时文件管理
│ ├── tempfile_cleaner.go # 临时文件清理
│ ├── utils.go # 工具函数
│ └── validate.go # 配置验证
├── loadbalance/ # 负载均衡算法 ├── loadbalance/ # 负载均衡算法
│ ├── balancer.go # 算法接口 │ ├── balancer.go # Balancer 接口、RoundRobin、WeightedRR、LeastConn、IPHash
│ ├── algorithms.go # 算法注册round-robin 等) │ ├── algorithms.go # 算法注册
│ ├── consistent_hash.go # 一致性哈希 │ ├── consistent_hash.go # 一致性哈希(虚拟节点)
│ ├── random.go # Power of Two Choices │ ├── random.go # Power of Two Choices
│ └── slow_start.go # 慢启动算法 │ └── slow_start.go # 慢启动算法
├── matcher/ # Location 匹配器 ├── matcher/ # Location 匹配器
@ -309,86 +339,85 @@ internal/
│ ├── exact.go # 精确匹配 │ ├── exact.go # 精确匹配
│ ├── prefix.go # 前缀匹配 │ ├── prefix.go # 前缀匹配
│ ├── regex.go # 正则匹配 │ ├── regex.go # 正则匹配
│ └── radix.go # 基数树匹配 │ ├── radix.go # 基数树匹配
│ ├── conflict.go # 冲突检测
│ ├── location.go # Location 定义
│ ├── named.go # 命名捕获组
│ └── prefix_priority.go # 前缀优先级排序
├── middleware/ # 中间件链 ├── middleware/ # 中间件链
│ ├── middleware.go # 中间件接口 │ ├── middleware.go # 中间件接口
│ ├── compression/ # Gzip/Brotli 压缩 │ ├── compression/ # Gzip/Brotli 压缩
│ │ ├── compression.go # 压缩实现 │ │ ├── compression.go # 压缩实现
│ │ └── gzip_static.go # 预压缩文件 │ │ └── gzip_static.go # 预压缩文件
│ ├── security/ # 安全中间件 │ ├── security/ # 安全中间件
│ │ ├── access.go # 访问控制 │ │ ├── access.go # IP/CIDR 访问控制
│ │ ├── ratelimit.go # 限流算法 │ │ ├── ratelimit.go # 令牌桶限流
│ │ ├── sliding_window.go # 滑动窗口 │ │ ├── sliding_window.go # 滑动窗口限流
│ │ ├── auth.go # Basic Auth │ │ ├── auth.go # Basic Authbcrypt/argon2id
│ │ ├── auth_request.go # 子请求认证 │ │ ├── auth_request.go # 子请求认证
│ │ ├── geoip.go # GeoIP 过滤 │ │ ├── geoip.go # GeoIP 过滤
│ │ └ headers.go # 安全头部 │ │ └── headers.go # 安全头部
│ ├── rewrite/ # URL 重写 │ ├── rewrite/ # URL 重写
│ │ └ rewrite.go # 重写实现 │ ├── accesslog/ # 访问日志nginx 兼容格式)
│ ├── accesslog/ # 访问日志
│ │ └ accesslog.go # 日志实现
│ ├── bodylimit/ # 请求体大小限制 │ ├── bodylimit/ # 请求体大小限制
│ │ └ bodylimit.go # 限制实现
│ ├── limitrate/ # 响应速率限制 │ ├── limitrate/ # 响应速率限制
│ │ └ limitrate.go # 限速实现
│ └── errorintercept/ # 错误页面拦截 │ └── errorintercept/ # 错误页面拦截
│ └ errorintercept.go # 拦截实现
├── lua/ # Lua 脚本引擎 ├── lua/ # Lua 脚本引擎
│ ├── engine.go # gopher-lua 引擎 │ ├── engine.go # gopher-lua 引擎
│ ├── context.go # Lua 请求上下文 │ ├── context.go # 请求上下文
│ ├── register.go # API 注册 │ ├── register.go # API 注册
│ ├── socket_manager.go # Socket 管理 │ ├── socket_manager.go # Socket 管理
│ ├── filter_writer.go # header/body_filter │ ├── filter_writer.go # header/body_filter
│ └── api_*.go # nginx-lua 兼容 API20+ 文件) │ └── api_*.go # nginx-lua 兼容 API20+ 文件)
├── http2/ # HTTP/2 服务器 ├── http2/ # HTTP/2 服务器
│ ├── server.go # HTTP/2 服务器实现 │ ├── server.go # HTTP/2 实现
│ └── adapter.go # HTTP/2 适配器 │ └── adapter.go # 适配器
├── http3/ # HTTP/3 服务器 ├── http3/ # HTTP/3 服务器
│ ├── server.go # QUIC 服务器 │ ├── server.go # QUIC 服务器
│ └── adapter.go # HTTP/3 适配器 │ └── adapter.go # 适配器
├── stream/ # TCP/UDP Stream 代理 ├── stream/ # TCP/UDP Stream 代理
│ ├── stream.go # 四层代理实现 │ ├── stream.go # 四层代理
│ └ ssl.go # Stream SSL 支持 │ └── ssl.go # Stream SSL
├── ssl/ # TLS 配置 ├── ssl/ # TLS 配置
│ ├── ssl.go # TLS 管理器 │ ├── ssl.go # TLS 管理器
│ ├── ocsp.go # OCSP Stapling │ ├── ocsp.go # OCSP Stapling
│ ├── session_tickets.go # Session Tickets 密钥轮换 │ ├── session_tickets.go # Session Tickets 轮换
│ └ client_verify.go # 客户端证书验证 │ └── client_verify.go # 客户端证书验证
├── cache/ # 缓存系统 ├── cache/ # 缓存系统
│ ├── backend.go # 缓存后端抽象 │ ├── backend.go # 缓存后端抽象
│ ├── file_cache.go # 文件缓存 │ ├── file_cache.go # 文件缓存LRU
│ ├── disk_cache.go # 磁盘缓存 │ ├── disk_cache.go # 磁盘缓存
│ ├── tiered_cache.go # L1/L2 分层缓存 │ ├── tiered_cache.go # L1/L2 分层缓存
│ └ purge.go # 缓存清除 │ └── purge.go # 缓存清除
├── resolver/ # DNS 解析器 ├── resolver/ # DNS 解析器
│ ├── resolver.go # DNS 解析逻辑 │ ├── resolver.go # DNS 解析
│ ├── cache.go # DNS 结果缓存 │ ├── cache.go # DNS 缓存
│ └ stats.go # DNS 解析统计 │ └── stats.go # 解析统计
├── variable/ # 变量系统 ├── variable/ # 变量系统
│ ├── variable.go # 变量接口 │ ├── variable.go # 变量接口
│ ├── builtin.go # 内置变量 │ ├── builtin.go # 内置变量$remote_addr 等)
│ ├── pool.go # 变量池 │ ├── pool.go # 变量池
│ └ ssl.go # SSL 相关变量 │ └── ssl.go # SSL 变量
├── converter/ # 配置转换器 ├── converter/ # 配置转换器
│ └ nginx/ # nginx 配置导入 │ └── nginx/ # nginx 配置导入
│ ├── parser.go # nginx 语法解析 │ ├── parser.go # nginx 语法解析
│ └ converter.go # YAML 转换 │ └── converter.go # YAML 转换
├── logging/ # 日志系统 ├── logging/ # 日志系统
│ └ logging.go # 结构化日志zerolog │ └── logging.go # zerolog 封装
├── netutil/ # 网络工具 ├── netutil/ # 网络工具
│ ├── ip.go # IP 解析 │ ├── ip.go # IP 解析
│ ├── host.go # 主机名处理 │ ├── host.go # 主机名处理
│ └ url.go # URL 处理 │ └── url.go # URL 处理
├── mimeutil/ # MIME 类型检测 ├── mimeutil/ # MIME 类型
│ └ detect.go # MIME 检测实现 │ └── detect.go # MIME 检测
├── sslutil/ # SSL 工具 ├── sslutil/ # SSL 工具
│ └ certpool.go # 证书池管理 │ └── certpool.go # 证书池
├── utils/ # 通用工具 ├── utils/ # 通用工具
│ ├── httperror.go # HTTP 错误处理 │ ├── httperror.go # HTTP 错误处理
│ └ internal.go # 内部工具 │ └── internal.go # 内部工具
├── version/ # 版本信息 ├── version/ # 版本信息
│ └ version.go # 版本定义 │ └── version.go # 版本定义
└── benchmark/ # 基准测试工具 └── benchmark/ # 基准测试
└── tools/ # 测试辅助工具 └── tools/ # 测试辅助工具
``` ```
@ -709,7 +738,7 @@ sudo systemctl status lolly # 查看状态
```json ```json
{ {
"version": "0.2.1", "version": "0.2.2",
"uptime": "2h30m15s", "uptime": "2h30m15s",
"connections": 150, "connections": 150,
"requests": 125000, "requests": 125000,
@ -935,7 +964,7 @@ curl http://localhost:8080/status | jq '.cache'
### 环境要求 ### 环境要求
- Go 1.24+ - Go 1.26+
- make - make
### 命令 ### 命令
@ -968,10 +997,12 @@ make lint
### 项目统计 ### 项目统计
- Go 文件290 - Go 源文件174 个
- 测试文件157 - 测试文件158 个
- 核心模块均有完整测试和性能基准测试 - 总代码行数:~136,000 行
- 测试覆盖率:>80%
- 中文代码注释 - 中文代码注释
- 所有核心模块均有完整单元测试和性能基准测试
## 依赖 ## 依赖
@ -980,7 +1011,7 @@ make lint
| [fasthttp](https://github.com/valyala/fasthttp) | v1.70.0 | HTTP 服务器核心 | | [fasthttp](https://github.com/valyala/fasthttp) | v1.70.0 | HTTP 服务器核心 |
| [fasthttp/router](https://github.com/fasthttp/router) | v1.5.4 | HTTP 路由器 | | [fasthttp/router](https://github.com/fasthttp/router) | v1.5.4 | HTTP 路由器 |
| [quic-go](https://github.com/quic-go/quic-go) | v0.59.0 | QUIC/HTTP/3 实现 | | [quic-go](https://github.com/quic-go/quic-go) | v0.59.0 | QUIC/HTTP/3 实现 |
| [zerolog](https://github.com/rs/zerolog) | v1.35.0 | 零分配 JSON 日志 | | [zerolog](https://github.com/rs/zerolog) | v1.35.1 | 零分配 JSON 日志 |
| [gopher-lua](https://github.com/yuin/gopher-lua) | v1.1.2 | Lua 脚本引擎 | | [gopher-lua](https://github.com/yuin/gopher-lua) | v1.1.2 | Lua 脚本引擎 |
| [klauspost/compress](https://github.com/klauspost/compress) | v1.18.5 | Gzip/Brotli 压缩 | | [klauspost/compress](https://github.com/klauspost/compress) | v1.18.5 | Gzip/Brotli 压缩 |
| [brotli](https://github.com/andybalholm/brotli) | v1.2.1 | Brotli 压缩编码 | | [brotli](https://github.com/andybalholm/brotli) | v1.2.1 | Brotli 压缩编码 |