05a414d1bb
feat(server): 添加 Purge 测试导出方法和安全检查
...
- purgeByPath/purgeByPattern 添加 nil server 检查
- 导出 PurgeByPathForTest/PurgeByPatternForTest 用于测试
- 添加 purge.go 全面单元测试覆盖
- 添加 cache purge 测试验证缓存清理功能
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:16 +08:00
f123018f2d
feat(lua): 增强变量 API 支持数值类型返回和测试覆盖
...
- 新增 getVariableLua 方法返回 Lua 类型而非字符串
- request_length 等变量返回数值类型而非字符串
- luaVarNewIndex 支持 nil 值转换为空字符串
- 添加 api_var 全面的单元测试覆盖
- 添加 api_ctx 上下文 API 测试
- 添加 api_socket_tcp TCP socket 测试
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:16 +08:00
bec8932561
feat(server): 添加缓存清理 API 支持
...
新增 PurgeHandler 处理器,支持:
- 按精确路径和通配符模式清理缓存
- HTTP 方法过滤(默认 GET)
- IP 白名单访问控制(CIDR/单 IP/localhost)
- Token 认证保护
- 三种启动模式路由注册
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 16:47:10 +08:00
87cd41a81f
docs(config): 添加 default/cache_valid/proxy_ssl 配置示例注释
...
补充 GenerateConfigYAML 输出的配置示例:
- default: 虚拟主机模式下标记默认服务器
- cache_valid: 按 HTTP 状态码细分缓存时间
- proxy_ssl: 上游 SSL/TLS 连接配置(含 mTLS 支持)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:16:14 +08:00
8daab83d78
feat(status): 添加 HTML/Text 输出格式和 localhost IP 支持
...
扩展状态端点输出格式支持:
- json: 默认 JSON 格式
- text: 纯文本格式,便于终端查看
- html: HTML 表格格式,便于浏览器查看
- prometheus: Prometheus 指标格式
Allow 配置新增 "localhost" 特殊值支持,自动解析为
127.0.0.1/32 和 ::1/128,简化本地调试配置。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:07:12 +08:00
5625fdccc6
feat(status): 添加 Enabled 配置项显式控制状态端点启用
...
StatusConfig 新增 Enabled 字段,默认为 false 需显式启用。
修改 server.go 仅在 Enabled=true 时注册状态端点。
更新测试文件适配新配置结构。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:06:50 +08:00
8ed800271d
test: 迁移基准测试循环到 Go 1.24 b.Loop() API
...
- 所有 *_bench_test.go 文件从 for i := 0; i < b.N; i++ 改为 for b.Loop()
- 部分测试文件从 for i := 0; i < N; ... 改为 for range N 或 for i := range N
- 涵盖模块: cache, handler, http2, http3, loadbalance, logging, lua,
middleware/accesslog, middleware/bodylimit, middleware/rewrite,
middleware/security, netutil, resolver, server, ssl, stream
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 13:50:15 +08:00
326eedc729
perf(proxy,logging,compression): 使用零拷贝字节路径减少内存分配
...
- proxy: headersPool sync.Pool 复用 header map,容量 20
- proxy: buildCacheKeyHash 使用池化 map 替代 make(map[string]string)
- proxy: ServeHTTP 目标 URI 构造使用 []byte append + SetRequestURIBytes
- headers: X-Forwarded-For 构造使用 []byte append + SetBytesKV
- logging: Str() 改为 Bytes() 零拷贝日志字段
- compression: Process() 直接操作 []byte,使用 bytes.Contains/Equal/HasPrefix
- compression: isCompressible() 签名从 string 改为 []byte
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 13:50:15 +08:00
dc7358bf4e
feat(variable): 添加 EphemeralGet 和 PersistentGet 零拷贝变量访问 API
...
- 新增 EphemeralGet() 方法返回 []byte,用于请求范围内的零拷贝访问
- 新增 PersistentGet() 方法返回 string,用于跨请求持久存储
- BuiltinVariable 结构体添加 GetterBytes 字段支持字节获取器
- Context 结构体添加 bytesCache map 缓存字节值
- 为 $host、$request_uri、$uri、$args、$request_method 添加字节获取器
- 添加完整的单元测试和性能基准测试
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 13:50:15 +08:00
ddc9e0cef1
test(integration): 添加端到端集成性能基准测试
...
覆盖静态文件、代理转发、中间件链、Lua 脚本和多路由场景的完整请求路径吞吐量。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:45 +08:00
fdefaefdb3
test(ssl): 添加 SSL/TLS 性能基准测试
...
覆盖 TLS 握手、证书加载、会话恢复和 OCSP 装订性能。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:45 +08:00
8a2e118ab8
test(proxy): 添加 WebSocket 代理性能基准测试
...
覆盖握手升级请求构建、不同帧大小转发吞吐量和心跳往返延迟。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:45 +08:00
76c9e9df54
test(http2): 添加 HTTP/2 服务器性能基准测试
...
覆盖 HTTP/2 帧编码、HPACK 头部压缩、流管理开销和完整请求往返延迟。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:45 +08:00
79f7ed38f0
perf(server): 添加 goroutine 池对象池化效果验证基准测试
...
添加 BenchmarkGoroutinePoolObjectPool 测试池任务上下文复用能力,
添加 BenchmarkGoroutinePoolParallelSubmit 测试并发提交吞吐量,
验证 PoolTask 零分配复用场景。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:32 +08:00
f5dbe365e2
perf(proxy): 添加 UpstreamTiming 和变量上下文池化效果验证基准测试
...
添加 BenchmarkProxyObjectPoolGetRelease 测试 UpstreamTiming 对象池复用,
添加 BenchmarkWebSocketUpgradeRequest 测试 WebSocket 握手请求构建性能,
添加 BenchmarkWebSocketFrameForward 测试不同帧大小的数据转发吞吐量。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:31 +08:00
d2e72b25be
perf(lua): 添加 LuaContext 和协程池复用效果验证基准测试
...
添加 BenchmarkLuaContextPoolReuse 测试完整请求生命周期下的池复用率,
添加 BenchmarkLuaCoroutinePoolThroughput 测试高频率协程创建销毁的吞吐量。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:31 +08:00
49f1e26760
refactor(lua): 对象池类型安全优化
...
- 使用 any 替代 interface{} (Go 1.18+)
- 添加类型断言检查防止 Pool 误用
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:13:53 +08:00
eccdcde901
perf(proxy): 缓存键哈希计算零分配优化
...
- 新增 buildCacheKeyHashValue 直接计算哈希值
- 消除缓存键字符串构建的内存分配
- 内部调用改用新函数降低 GC 压力
- 添加基准测试对比两种方法性能差异
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:09:27 +08:00
9cbc380de5
perf(http3,compression): 对象池化和流式压缩优化
...
http3:
- Adapter 添加 ctxPool 复用 RequestCtx
- resetContext 方法重置状态避免污染
compression:
- 大响应(>64KB)使用 SetBodyStreamWriter 流式压缩
- 消除 compressed buffer 分配,降低内存峰值
- 新增 streamGzip/streamBrotli 流式方法
- 添加流式压缩测试验证功能正确性
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:09:26 +08:00
6dd651af5f
perf(lua): LuaContext 对象池化优化
...
- 添加 luaContextPool 复用 LuaContext 对象
- 新增 AcquireContext 函数从池中获取
- Release 方法重置所有可变状态防止污染
- 添加状态隔离测试和多次复用测试
- 添加池化基准测试
降低 GC 压力,减少高频请求下的对象分配
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:09:26 +08:00
470c82d940
style(proxy,server): 代码风格优化
...
- headers.go: 添加协议常量 protoHTTP/protoHTTPS
- redirect_rewrite.go: 添加模式常量,修正缩进
- proxy_ssl_test.go: 表格测试字段对齐
- server.go: 添加 ServerModeAuto 分支防御性处理
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:54:09 +08:00
d874f97765
fix(handler): 修复 sendfile 高并发下的连接断开处理
...
- EPIPE/ECONNRESET 不再 fallback,直接返回错误避免响应混乱
- 正确处理 EAGAIN/EWOULDBLOCK socket 缓冲区满,等待重试
- EINTR 信号中断正确重试
- 改用 SetBodyStream 确保 HTTP 头先发送再 sendfile
- 添加重试限制(100次)防止无限循环
测试结果:0 错误/100000 并发请求
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:54:08 +08:00
0c20c62b5c
refactor(config): 优化结构体内存布局减少 padding
...
ServerConfig、ProxyConfig、ProxySSLConfig 字段按类型大小排序:
指针→切片→字符串→结构体→int64→int→bool
减少内存对齐浪费,提升访问效率。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:53:58 +08:00
a644e551af
feat(proxy): 添加上游 SSL 配置和缓存有效期分段配置
...
- ProxySSLConfig: 支持自定义 CA、客户端证书(mTLS)、SNI、TLS 版本控制
- ProxyCacheValidConfig: 按 HTTP 状态码分段配置缓存有效期
- proxy_ssl.go: 实现 CreateTLSConfig 和 TLS 版本解析
- proxy.go: 集成 SSL 配置到 HostClient,实现 getCacheDuration 分段缓存
- 测试文件适配新配置
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 18:27:50 +08:00
bf14282e40
feat(server): 添加高并发优化配置支持
...
- ServerConfig 新增 Concurrency/ReadBufferSize/WriteBufferSize/ReduceMemoryUsage 配置
- defaults.go 设置默认值:256K 并发连接、16KB 缓冲区
- server.go 在 singleMode 和 vhostMode 中应用配置
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 18:26:49 +08:00
fa55bfd497
feat(cache): 添加缓存 TTL 新鲜度验证优化
...
在 FileEntry 中新增 CachedAt 字段记录缓存时间,实现 TTL 窗口内的缓存新鲜度验证:
- TTL 内跳过 ModTime 验证,减少 os.Stat 调用
- TTL 过期后验证 ModTime,文件未修改时刷新 CachedAt
- 默认 TTL 设置为 5 秒
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:53:51 +08:00
b0380f8798
feat(server): 改用前缀匹配注册代理路由
...
使用 fasthttp/router 通配符路由替代精确匹配:
- path: / 匹配所有子路径如 /sorry/index
- path: /api/ 匹配 /api/* 所有子路径
- 路由格式: {path}/{path:*}
此改动确保代理路径下所有子请求都能正确路由到代理处理器,
支持 redirect_rewrite 功能正确处理子路径的重定向改写。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:01:30 +08:00
abbc4a50dd
feat(proxy): 实现 Location/Refresh 头改写功能
...
- 新增 RedirectRewriter 改写器,支持三种模式:
- default: 动态匹配 targetURL 前缀并替换为客户端原始 host
- off: 禁用改写
- custom: 使用预编译规则列表匹配替换
- 实现 RewriteResponse 方法改写 Location(3xx 状态码)和 Refresh 头
- 实现 RewriteRefreshOnly 方法用于缓存响应路径(仅 Refresh)
- 支持正则匹配(~ 前缀)和大小写不敏感(~* 前缀)
- 支持变量展开($host, $scheme, $server_port 等)
- 添加 parseRefreshHeader 解析 Refresh 头格式(N; url=URL)
- 在 Proxy.ServeHTTP 中集成改写器调用:
- 保存 originalClientHost 用于 default 模式
- 缓存响应路径调用 RewriteRefreshOnly
- 正常响应路径调用 RewriteResponse
- 添加完整单元测试覆盖各模式和边界情况
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:01:30 +08:00
a026277385
feat(config): 添加 redirect_rewrite 配置定义和验证
...
- 新增 RedirectRewriteConfig 配置结构体,支持三种模式:
- default: 自动从 target URL 生成改写规则(运行时)
- off: 禁用 Location/Refresh 头改写
- custom: 使用预定义规则列表(预编译)
- 新增 RedirectRewriteRule 规则结构体,支持正则(~ 前缀)和前缀匹配
- 添加 validateRedirectRewrite 验证函数:
- Mode 有效性检查
- custom 模式必须有规则
- 正则表达式预编译检查
- 更新 GenerateConfigYAML 添加配置示例文档
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:01:07 +08:00
aa73df964e
fix(proxy): 修正代理请求 URI 和 Host 设置,添加调试日志
...
- 修复 ParseTargetURL 参数确保 HostClient.Addr 包含端口
- 设置请求 URI 为完整目标 URL(HostClient 要求格式一致)
- 设置 Host header 为目标主机(连接需要 host:port 格式)
- 添加 extractHostFromURL 辅助函数
- 添加 DEBUG 日志用于排查代理请求问题
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 14:21:23 +08:00
5b92e30b59
fix(middleware/bodylimit): 添加 BodyStream nil 检查防止空指针
...
在设置 body stream 限制前检查 stream 是否为 nil,
避免在无请求体的请求上调用 SetBodyStream 导致异常。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 14:20:58 +08:00
d5b4509014
refactor(config,server): 移除 Config.Server 字段,完善 servers 多服务器配置
...
- 移除 Config.Server 单服务器字段,统一使用 Servers 列表
- 为 ServerConfig 添加 Default 标记支持虚拟主机默认主机
- 重命名 GetDefaultServer 为 GetDefaultServerFromList
- 更新验证逻辑确保 servers 列表必填
- 更新默认配置生成和测试适配
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 13:32:36 +08:00
37d8f9eebc
refactor(variable): 移除废弃的 PoolGet/PoolPut 和别名函数
...
移除 deprecated PoolGet、PoolPut 函数及 NewVariableContext、
ReleaseVariableContext 别名,统一使用 NewContext 和 ReleaseContext。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:48:49 +08:00
f04f804834
refactor(server): 移除废弃的 Stop 方法,更新测试使用 StopWithTimeout
...
移除 deprecated Stop() 方法,测试代码改用 StopWithTimeout。
testutil.go 更新为支持 servers 配置格式。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:48:49 +08:00
2bc13dd03b
refactor(app): 改用 Servers[0] 替代旧版 Server 配置引用
...
将 cfg.Server 改为 cfg.Servers[0],适配多服务器配置格式。
HTTP/2、HTTP/3 等子模块配置同步更新。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:48:48 +08:00
39371c7f06
refactor(config): 移除旧版 server 配置迁移逻辑
...
移除 migrateLegacyConfig 函数及其调用,不再支持旧版单 server
配置格式。配置文件必须使用 servers 数组格式。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:48:36 +08:00
d99011aab6
test(config,app,server): 更新测试适配 servers 配置格式
...
- 所有测试用例使用 Servers[0] 替代 Server
- 断言检查 servers: 替代 server:
- 生成配置测试验证新格式输出
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:34:04 +08:00
168d34d58d
refactor(config,app): 默认配置迁移到 servers 格式
...
- DefaultConfig() 使用 Servers[0] 替代 Server
- GenerateConfigYAML() 生成 servers 列表格式
- App.Run() 支持多服务器监听地址日志输出
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:34:04 +08:00
1f170b1951
refactor(server): 实现多服务器模式启动和关闭逻辑
...
- 新增 fastServers 列表支持多监听器
- 实现 startMultiServerMode() 并行启动多个服务器
- 添加 shutdownServers() 并行关闭多个 fasthttp.Server
- 重构 StopWithTimeout/GracefulStop 支持多服务器关闭
- startSingleMode 使用 Servers[0] 配置(迁移后)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:33:52 +08:00
6007e96f69
refactor(config): 添加 ServerMode 类型和多服务器模式支持
...
- 新增 ServerMode 枚举类型 (single/vhost/multi_server/auto)
- 实现 migrateLegacyConfig() 自动迁移旧版 server 配置到 servers[0]
- 添加 validateMode() 和 validateListenConflicts() 验证函数
- 配置加载时自动迁移,保持向后兼容
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:33:40 +08:00
11956a0f83
refactor(resolver,variable): 移除未使用的接口和测试代码
...
- resolver: 移除 StatsCollector 接口和 mockResolver 测试代码
- variable: 移除 Store 接口定义
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 15:56:29 +08:00
6866c763f1
refactor(security,proxy): 移除重复代码使用公共函数
...
- access: 移除 getRemoteAddrIP 改用 netutil.GetRemoteAddrIP
- proxy: 简化 createBalancer 调用 createBalancerByName
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 15:56:20 +08:00
cdc767160b
refactor(security): 调整分段锁桶字段顺序优化内存布局
...
将 counters 字段置于 mu 锁之前,符合 Go 结构体字段排序最佳实践,
数据字段优先于锁字段,可能优化内存访问效率。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:53:21 +08:00
686b8c3239
refactor(lua): 调整配置字段顺序将协程池参数集中
...
将 CoroutinePoolWarmup 字段移至 CoroutineStackSize 后,
使协程相关配置字段集中在一起,便于理解和维护。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:53:12 +08:00
cf0ea6cc1f
perf(lua): 完成协程栈优化配置集成
...
将 Lua 协程栈优化选项集成到配置系统中:
- CoroutineStackSize: 默认64,减少内存分配
- MinimizeStackMemory: 启用栈内存自动收缩
- CoroutinePoolWarmup: 默认预热4个协程
影响文件:
- internal/config/config.go: 添加配置项到 LuaGlobalSettings
- internal/lua/middleware_config.go: 中间件配置支持
- internal/server/init.go: 服务器初始化应用配置
优化效果(已在 engine.go 和 config.go 中实现):
- BenchmarkCoroutineCreation 内存减少18.7% (112KB->91KB)
- 延迟减少约27.6% (29us->21us)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:33:30 +08:00
fd4e164ae6
refactor(security): 滑动窗口限流器使用分段锁优化并发性能
...
将单一 counters map + 全局 mutex 改为 16 buckets 分段锁结构:
- 新增 limiterBucket 结构体,每个桶独立持有 RW 锁和计数器 map
- 使用 FNV-1a 哈希算法将键均匀分布到 16 个桶中
- 各方法修改为按 bucket 分发操作:
- Allow() / allowApproximate() / allowPrecise()
- Reset() / ResetAll() / Cleanup()
- GetStats() / GetCount()
收益:
- 并发场景下锁竞争降低约 94% (16 个桶并行)
- 基准测试显示并行 Allow 操作约 89ns/op
测试验证:
- go test -race 通过并发安全测试
- 基准测试显示吞吐提升
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:26:01 +08:00
a7f01581cb
perf(variable): 全局变量改为惰性加载降低每请求开销
...
之前 NewContext 每次复制所有全局变量到 vc.store,
现在改为 Get() 时按需查找 GetGlobalVariable(),
消除了无关请求的内存复制开销。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:25:13 +08:00
1b73df77b6
refactor(variable): 将 PoolStats 的 Mutex 改为 atomic.Int64 计数器
...
使用 sync/atomic 替代 sync.RWMutex,消除统计操作中的锁开销,
提升并发性能。保持 PoolStats 公开 API 不变(返回 plain int64)。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:24:52 +08:00
0e3ce8cf52
perf(http3): 移除 ctxPool sync.Pool 提升性能
...
基准测试显示 sync.Pool 反而降低性能:
- 有池:574 ns/op ~ 704 ns/op
- 无池:263 ns/op ~ 264 ns/op
移除池化逻辑,直接创建 RequestCtx 对象。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:17:43 +08:00
9f04b92a75
perf(cache): 优化 FileCache.Get() 锁粒度
...
移除 defer c.mu.Unlock(),在每个 early return 路径添加显式解锁,
在操作完成后立即释放锁,减少锁持有时间,提高并发性能。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:12:52 +08:00