310 Commits

Author SHA1 Message Date
xfy
bbf8032e6a refactor(config): 调整 include 配置示例位置
将 include 配置示例从 SSL 配置前移动到变量配置后的位置,
使配置示例的组织结构更加合理。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 10:41:13 +08:00
xfy
c929d320c6 chore: 禁用 govet fieldalignment 检查并修复未使用参数
- govet 禁用 fieldalignment 检查(结构体字段顺序优化不强制)
- ConfigLoader.merge 函数参数 srcPath 改为 _

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 10:11:57 +08:00
xfy
6281196dfd refactor(server): 优化结构体字段布局并使用 matcher 常量
- Server 和 VHostManager 结构体字段重新排序优化内存布局
- RegexHostMatcher 字段顺序调整
- 使用 matcher.LocationType* 常量替代硬编码字符串
- server_names 数组支持:遍历注册所有主机名
- 提取 createListener 方法支持 Unix socket

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 10:11:57 +08:00
xfy
ca03c121d3 refactor(matcher): 提取 LocationType 常量并优化结构体字段布局
- 添加 LocationType 常量定义替代硬编码字符串
- 优化 MatchResult、ExactMatcher、NamedMatcher 结构体字段顺序
- RadixTree.Insert 添加 locationType 参数用于调试追踪
- 更新测试代码适配新接口

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 10:11:45 +08:00
xfy
c418baeb90 feat(vhost): 增强 server_name 匹配支持通配符和正则
按 nginx server_name 规则实现多类型匹配:
- 精确匹配:example.com
- 前缀通配:*.example.com(最长匹配优先)
- 后缀通配:example.*
- 正则匹配:~regex(按配置顺序)
- 匹配优先级:精确 → 前缀通配 → 后缀通配 → 正则 → 默认

更新 AddHost 返回 error 以支持正则编译错误反馈

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 09:26:47 +08:00
xfy
359afb5e24 feat(server): 集成 LocationEngine 和 Unix socket 监听支持
- 使用 LocationEngine 替代 fasthttp/router 进行路由匹配
- 新增 createListener 支持 Unix domain socket 监听
- 支持热升级场景下的 Unix socket 继承
- 新增 registerProxyRoutesWithLocationEngine 和 registerStaticHandlersWithLocationEngine
- 添加 SetUpgradeManager 方法供 App 层注入

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 09:26:38 +08:00
xfy
1926bf34e0 feat(config): 添加配置引入、Unix socket 和多 server_name 支持
新增配置功能:
- include 机制:支持 glob 模式引入子配置文件,DAG-safe 循环检测
- unix_socket:Unix domain socket 权限和所有权配置
- server_names:多 server_name 支持(通配符和正则)
- location_type:proxy/static 的位置匹配类型配置
- location_name:命名 location 配置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 09:26:30 +08:00
xfy
53eaec57ad feat(matcher): 添加 nginx 风格 location 匹配引擎
实现 nginx 兼容的 location 匹配系统,支持:
- 精确匹配 (=) - Hash Map O(1)
- 前缀优先匹配 (^~) - Radix Tree
- 正则匹配 (~, ~*) - 按配置顺序
- 普通前缀匹配 - Radix Tree 最长匹配
- 命名 location (@name) - 内部重定向

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 09:26:22 +08:00
xfy
584ca9170d test(lua,security): 优化测试代码错误返回值处理
- api_socket_tcp_test.go: 使用空白标识符忽略非关键错误返回值
- auth_test.go: 使用空白标识符忽略不需要的 hash 返回值

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:24:05 +08:00
xfy
9d95aecd6f refactor(lua): 提取常量并优化结构体字段布局
- api_var.go: 提取 argPrefix 常量,消除魔法字符串
- coroutine.go: 按逻辑分组重排 LuaCoroutine 字段,改善可读性

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:24:05 +08:00
xfy
4000d220f4 test(proxy): 添加 DNS 解析测试覆盖
- 测试 DNS 解析功能
- 测试解析超时处理
- 测试缓存和刷新机制

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:38 +08:00
xfy
734304c5d7 test(server): 添加状态端点完整测试覆盖
- 测试 JSON/HTML/Text 输出格式
- 测试 localhost IP 限制
- 测试 Enabled 配置项控制
- 测试健康检查和指标输出

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:37 +08:00
xfy
3bdecd87eb test(security): 扩展认证和 GeoIP 中间件测试
- auth_test: 扩展 Basic/JWT/IP 白名单测试
- geoip_test: 扩展 GeoIP 限制和数据库加载测试
- 提高安全中间件测试覆盖率

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:29 +08:00
xfy
8f3f1527bc test(loadbalance): 添加负载均衡器完整测试覆盖
- 测试 RoundRobin/WRR/LeastConn/IPHash 算法
- 测试后端选择和权重分布
- 测试边界条件和并发安全

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:28 +08:00
xfy
04f6caa40d test(handler): 添加静态文件发送处理测试
- 测试 SendFile 基本功能和错误处理
- 测试 Range 请求支持
- 测试不同文件类型和 MIME 类型

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:12:28 +08:00
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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
xfy
75317b44dd build(docker): 添加 Docker 构建支持
- Dockerfile: 添加 GOPROXY/GOSUMDB 代理设置,优化编译参数
- Makefile: 添加 docker/docker-push/docker-clean 命令

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 14:12:32 +08:00
xfy
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
xfy
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
xfy
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
xfy
ddc9e0cef1 test(integration): 添加端到端集成性能基准测试
覆盖静态文件、代理转发、中间件链、Lua 脚本和多路由场景的完整请求路径吞吐量。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:45 +08:00
xfy
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
xfy
8a2e118ab8 test(proxy): 添加 WebSocket 代理性能基准测试
覆盖握手升级请求构建、不同帧大小转发吞吐量和心跳往返延迟。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:45 +08:00
xfy
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
xfy
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
xfy
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
xfy
d2e72b25be perf(lua): 添加 LuaContext 和协程池复用效果验证基准测试
添加 BenchmarkLuaContextPoolReuse 测试完整请求生命周期下的池复用率,
添加 BenchmarkLuaCoroutinePoolThroughput 测试高频率协程创建销毁的吞吐量。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:44:31 +08:00
xfy
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
xfy
eccdcde901 perf(proxy): 缓存键哈希计算零分配优化
- 新增 buildCacheKeyHashValue 直接计算哈希值
- 消除缓存键字符串构建的内存分配
- 内部调用改用新函数降低 GC 压力
- 添加基准测试对比两种方法性能差异

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:09:27 +08:00
xfy
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
xfy
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
xfy
cd807e43aa docs(nginx): 添加 nginx 源码架构分析文档
- Upstream 模块源码实现分析(负载均衡算法、故障转移)
- Stream 模块架构分析(TCP/UDP 代理处理流程)
- Mail 模块架构概述(IMAP/POP3/SMTP 协议支持)
- 事件模块源码架构(定时器、epoll、QUIC)
- 变量系统源码实现(索引变量、前缀变量机制)

基于 nginx 1.31.0 源码分析

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:09:26 +08:00
xfy
89df85a5f4 docs(prompts): 简化任务列表,移除已完成项目
移除已完成的文档分析和优化任务,更新路径引用以匹配新的目录结构
(docs/nginx/ 和 lib/fasthttp/)。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 10:48:23 +08:00
xfy
79668f44af chore(gitignore): 更新忽略规则,统一 lib 目录
移除单独的 fasthttp/ 和 nginx/ 忽略项,改用统一的 lib/ 目录忽略,
匹配项目依赖库的新目录结构。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 10:48:23 +08:00
xfy
972eab4267 refactor(docs): 重构文档目录结构,nginx 文档移至子目录
将 docs/ 根目录下的 nginx 相关文档统一移动到 docs/nginx/ 子目录,
提高文档组织性和可维护性。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 10:48:14 +08:00
xfy
0a332e8cef docs(prompts): 添加 fasthttp 源码分析任务
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 09:54:24 +08:00
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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
xfy
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