# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.4.1] - 2026-06-10

### Fixed

- **stream**: 修复上游选择逻辑，添加优雅关闭支持
- **stream**: 修复 Stop 后 stopCh 未重置导致的重启问题

## [0.4.0] - 2026-06-09

### Added

#### 负载均衡

- **Least Time 负载均衡器**：基于 EWMA（指数加权移动平均）统计的最少响应时间算法，自动选择响应最快上游
- **Session Sticky 负载均衡器**：基于 Cookie 的会话粘性，一致性哈希分片，支持 Cookie 过期、域名、路径、Secure/HttpOnly/SameSite 属性
- 对应 YAML 配置支持：`least_time`、`sticky` 策略及参数

#### 平台与构建

- FreeBSD 部署示例

### Fixed

- Least Time 响应时间记录修正
- Sticky Cookie 格式、分片键、过期检查修复
- Sticky 双重 Stop 防护和重启支持
- 配置验证：`least_time` 的 `default_time` 不允许负值

### Tests

- Least Time 和 Sticky 负载均衡器集成测试
- Least Time 和 Sticky 基准测试

## [0.3.0] - 2026-06-05

### Added

#### 核心功能

- Lua gjson 模块：JSON 编码/解码库，支持 sort_keys 选项
- Lua 路由注册：支持 route 字段的 Lua 脚本按路由执行
- Config include 指令：支持 glob 模式的配置文件拆分和包含
- SIGHUP 热重载：配置变更后通过信号触发无中断重载
- FreeBSD / OpenBSD 构建目标
- X-Forwarded-Host 和 X-Forwarded-Proto 可配置代理头

#### 平台与构建

- MIT 许可证
- `docs/plans/` 添加到 .gitignore
- Makefile 优化和一致性修复

### Performance

- matcher RadixTree 搜索 sync.Pool 零分配
- loadbalance filterHealthy 池化 + atomic.Bool 重建锁
- FileInfoCache 近似 LRU 替代读写锁升级
- resolver O(1) LRU（container/list）
- proxy 内联 FNV-1a 哈希、消除 WebSocket 字符串分配、缓存键单次遍历
- compression MIME 预计算字节切片、GeoIP 查找去重、gzip_static 预建扩展名集合
- ConsistentHash 双锁消除、Balancer healthy slice 池化

### Fixed

- 修复 9 个包的并发数据竞争（`go test -count=3 -race` 零 race）
  - lua: TCPSocket.currentOp 锁保护、schedulerMu 调度器同步
  - server: buildMiddlewareChain 并发写、multi-server 模式 goroutine 安全
  - handler/app/http3/stream: 测试同步和原子操作修复
- 多服务器模式 status/pprof 注册
- config include 循环检测
- atomic.Bool 替代 running 标志消除 data race
- OCSP 刷新逻辑、DNS resolver double-close panic
- SSL DER 提取改用 encoding/pem
- 根路径规范化修复

### Changed

- 删除 ~16.8k 行死代码（disk_cache、tiered_cache、tempfile、upgrade、lua mock engine 等）
- 提取公共函数到 testutil/netutil/utils
- 合并冗余 switch、移除 50+ 子目录 AGENTS.md
- fasthttp 升级至 1.71.0，compress 升级至 1.18.6

### Tests

- 安全中间件覆盖率 75.9% → 88.5%
- 服务器模块覆盖率 78.6% → 83.3%
- proxy 覆盖率 71.1% → 80%+
- variable 覆盖率 74.5% → 85%+
- http3 覆盖率 46% → 93.1%
- sslutil 覆盖率 29.2% → 85%+
- adapter 覆盖率 0% → 80%+
- stream 覆盖率 57% → 75%+

### Build

- 删除 GitHub Actions workflow 文件
- 添加 `docs/skills/release.md` 发布流程技能

## [0.2.2] - 2026-04-30

### Added

#### 核心功能

- autoindex 模块：自动目录列表功能
- nginx 配置导入功能（converter），支持 listen、server 级别 root/index、alias、try_files 等指令转换
- internal 指令：防止外部直接访问特定 location，支持 X-Accel-Redirect 内部重定向
- server_tokens 配置：控制 Server 响应头是否显示版本号
- types 配置块：自定义 MIME 类型映射，线程安全实现 (mimeutil)

#### 静态文件服务

- ETag 和 304 Not Modified 支持，减少带宽消耗
- expires 缓存控制支持
- alias 配置支持，路径别名映射
- gzip_static 默认值改为 true

#### 代理与缓存

- 分层缓存架构实现
- stale_if_error 和 stale_if_timeout 缓存回退逻辑
- 健康检查增强和缓存配置扩展
- ProxyBind / ProxyBuffering / ProxyURI 和响应头控制
- 上游服务器参数和 random 负载均衡算法
- 慢启动 (slow start) 负载均衡功能

#### 中间件

- limit_rate 响应速率限制中间件，支持令牌桶算法和大文件回退策略

#### 平台与构建

- act 命令支持本地运行 CI
- E2E 测试框架集成 testcontainers
- 分层测试 CI 工作流和基准测试 GitHub Actions workflow

### Changed

- 日志格式参数从布尔值改为字符串，支持 json / text / console 格式
- 版本信息模块化重构
- 代码现代化：采用 Go 1.22+ 特性（slices/maps 等）
- 提取 HTTP/2/3 适配器公共逻辑为 CommonAdapter
- 提取 TLS 配置生成到 sslutil
- 提取 createFastServer / createProxyForConfig 辅助函数
- 统一 IP 白名单解析和 excludeSet 构建
- 提取公共逻辑、消除重复代码、加强错误处理
- 缓存处理中消除 goto 语句，用互斥锁替代原子操作保护 Target 失败状态
- 增强预压缩配置灵活性，提取常量提高代码可读性
- 精简并重构 README 文档结构

### Performance

- FileInfo 缓存：handleTryFiles 和 handleInternalRedirect 使用缓存减少 stat 调用
- 缓存 ETag 复用：避免重复生成 ETag
- FileInfoCache 使用 RWMutex 替代 Mutex 提升并发读性能
- 预压缩文件存在性缓存：避免重复 os.Stat 调用
- 压缩中间件使用 bytes 操作避免字符串分配
- ConsistentHash 和 RateLimiter 并发优化
- Balancer healthy slice 池化减少分配
- FileEntry 池化减少 GC 压力
- 零分配优化与 Dial timeout 支持
- Cache.Get 方法读锁优先，double-check 升级写锁
- 静态文件服务性能优化

### Fixed

- Lua 引擎并发安全问题
- sync.Pool 指针包装消除装箱分配
- 2 个 CRITICAL + 6 个 HIGH 安全与代码质量问题
- nginx 配置解析空字符串和 upstream URL 问题
- 多 listen 指令的 server 块转换
- 跳过已有 Content-Encoding 的响应压缩
- ProxyBind 拨号超时和 Cookie 属性匹配
- HealthChecker 重启支持
- shutdownServers nil ctx 防御性检查
- dictReplace key 存在性检查逻辑
- ParseRegexPattern nginx 风格正则解析
- remote_port 和 server_port Lua 变量返回空值
- 配置默认值同步 GenerateConfigYAML 输出
- coverage.html gitignore 规则
- 根路径规范化修复相对路径性能问题

### Documentation

- 为多个模块添加标准化 godoc 注释（lua / matcher / proxy / middleware / logging 等）
- 更新 README.md 配置示例和文档
- 更新 AGENTS.md 文档，添加新模块说明
- 添加子目录 AGENTS.md 文档

### Tests

- E2E 测试完整覆盖：代理、静态文件、SSL/TLS、缓存、健康检查、负载均衡、WebSocket
- 缓存和代理集成测试
- DNS 解析器 Mock 测试
- Lua 边界场景和 Scheduler 模式测试
- HTTP/2 E2E 和 TLS 集成测试
- 正则 location 配置集成测试
- 多模块单元测试覆盖率扩展
- 分片缓存原型与扩展性对比测试
- 多项专项基准测试（缓存键零分配、FileCache Set 分配热点、变量展开分配追踪等）

### Build

- 分层测试 CI 工作流
- 基准测试 GitHub Actions workflow
- check 目标改为使用 test-all
- bench 目标限制到 internal 目录

## [0.2.1] - 2026-04-17

### Added

#### 核心功能

- 多服务器模式支持，可在单个配置中定义多个独立 server
- Location 匹配引擎，支持 nginx 风格的精确/前缀/正则匹配
- server_name 通配符和正则匹配支持
- Unix socket 监听支持
- 配置引入 (include) 支持，可拆分配置到多个文件
- 缓存清理 API 端点
- 状态端点 HTML/Text 输出格式，支持 localhost IP 访问
- 上游 SSL 配置，支持代理连接使用自定义证书
- 高并发优化配置项
- 缓存 TTL 新鲜度验证优化
- Location/Refresh 头改写功能
- DNS 缓存 LRU 淘汰机制

#### Lua 中间件系统

- 完整 ngx API 实现：ngx.var/ngx.ctx/ngx.req/ngx.resp/ngx.log
- 共享字典 API (ngx.shared.DICT)
- 定时器 API (ngx.timer)，含线程隔离和回调限制
- 子请求 API (ngx.location.capture)
- Cosocket API 和响应拦截器
- balancer_by_lua 动态负载均衡
- Lua 脚本嵌入支持，含沙箱安全检查

#### 安全与访问控制

- GeoIP 国家代码访问控制
- 符号链接安全检查
- 静态文件处理符号链接安全检查

#### 平台支持

- Docker 容器化部署支持
- Windows 平台构建和运行兼容性

#### 可观测性

- Prometheus 状态输出端点缓存清理 API

### Changed

- 移除旧版单 server 配置，统一使用 servers 数组格式
- 结构体内存布局优化减少 padding
- 提取公共模块：mimeutil、sslutil、netutil、testutil
- 使用标准库 slices/maps 替代自定义函数
- gofumpt 替代 goimports 格式化代码
- 禁用 govet fieldalignment 检查

### Performance

- 零拷贝字节路径减少内存分配
- EphemeralGet/PersistentGet 零拷贝变量访问 API
- LuaContext/协程池对象池化
- 缓存键哈希计算零分配优化
- 全局变量惰性加载降低每请求开销
- 滑动窗口限流器分段锁优化并发性能
- FileCache.Get() 锁粒度优化
- HTTP/3 移除冗余 ctxPool 提升性能

### Fixed

- ClientMaxBodySize 默认值设置
- sendfile 高并发下连接断开处理
- WebSocket 升级失败时的资源泄漏
- 代理请求 URI 和 Host 设置
- BodyStream nil 检查防止空指针
- 负载均衡器 hostnameOnce 并发安全
- SSL 证书验证禁用的安全警告
- 大量 golangci-lint 错误修复

### Documentation

- nginx 源码架构分析文档
- fasthttp 源码分析任务规划
- 重构文档目录结构，nginx 文档移至子目录
- Lua 配置示例和示例脚本
- 更新 README 添加 GeoIP 和 Lua 功能说明

### Tests

- 端到端集成性能基准测试
- HTTP/2/HTTP/3/WebSocket 性能基准测试
- Lua 协程和字节编译性能基准测试
- DNS 解析、状态端点、负载均衡器完整测试
- 静态文件发送处理测试
- 基准测试迁移到 Go 1.24 b.Loop() API

### Build

- Docker 构建支持
- Windows 平台构建兼容性
- golangci-lint 配置重构，重新启用多项检查

---

## [0.2.0] - 2026-04-10

### Added

#### 核心基础设施

- 变量系统模块，支持内置变量、SSL 客户端证书变量、上游变量，自动注入请求上下文
- DNS 解析器模块，支持自定义 DNS 服务器配置，集成到代理请求处理
- HTTP/2 协议支持，集成到服务器和应用层

#### SSL/TLS 增强

- Session Tickets 支持，含密钥轮换和内存/文件存储后端
- mTLS 客户端证书验证，支持可选/强制验证模式
- TCP/UDP Stream SSL/TLS 支持，完整证书配置

#### 中间件与处理

- auth_request 外部认证中间件，支持子请求验证流程
- static handler alias 指令，支持路径别名映射
- 代理响应临时文件处理，保护内存避免大响应OOM
- rate limiting 后台自动清理和优雅关闭

#### 可观测性

- Prometheus 格式状态输出支持
- 缓存清理 API 端点
- 分层性能回归检测策略与基准测试套件

#### 配置与构建

- Resolver/SSL 默认值完善及 YAML 配置示例输出
- 负载均衡算法配置验证
- golangci-lint 静态检查配置
- 所有构建命令启用静态链接支持
- goimports 替代 go fmt 格式化代码

### Changed

- resolver/variable/ssl 等核心类型重命名，移除冗余前缀
- HeadersMiddleware 重命名移除冗余前缀
- HTTP/2 使用 textproto.CanonicalMIMEHeaderKey 替代手动实现
- 配置废弃字段标记与移除

### Performance

- 一致性哈希虚拟节点哈希值预计算
- 代理缓存使用 uint64 哈希键优化性能

### Documentation

- 新增 variable/resolver 等 AGENTS.md 模块文档
- nginx 健康检查详解与高级模块文档
- 配置字段完整参考文档

### Tests

- 变量系统单元测试与基准测试
- SSL Session Tickets/Stream SSL 测试
- try_files、错误页面、pprof 单元测试

---

## [0.1.0] - 2026-04-07

### Added

#### 核心功能

- 反向代理与负载均衡模块，支持轮询/加权/最少连接/一致性哈希算法
- 故障转移 (next_upstream) 支持，自动切换备用上游
- 文件缓存模块，支持缓存元数据管理
- SSL/TLS 支持，强制 TLS 1.2+，支持证书配置
- HTTP/3 (QUIC) 支持，含 0-RTT 与性能配置验证
- 静态文件服务，支持多静态目录、路径前缀匹配、try_files 配置

#### 中间件系统

- URL 重写中间件，含 ReDoS 保护与循环检测
- gzip/deflate/Brotli 响应压缩中间件
- 请求体大小限制中间件
- 自定义错误页面支持
- 访问日志中间件，支持 nginx combined 格式
- 安全中间件（访问控制、可信代理配置）

#### 可观测性

- pprof 性能分析端点
- 访问/错误日志分离，支持全局格式配置
- 服务器状态 API

#### 配置与构建

- 配置加载模块，支持 YAML/CLI 参数
- 配置验证功能，多项验证函数
- Makefile 构建脚本，含基准测试基础设施
- 程序信号处理（优雅关闭、热升级）

### Changed

- 统一错误处理风格，空白标识符忽略明确不关心的返回值
- 抽取网络工具函数到 netutil 包，移除冗余代码
- 优化字符串构建方式，使用 fmt.Fprintf 替代冗余写法
- 增强 FlagLast 语义与循环检测

### Fixed

- 配置与代码实现不一致问题修复
- Phase 8 问题修复与功能完善

### Documentation

- 添加项目 README 文档
- 核心模块 GoDoc 文档注释
- nginx 模块翻译文档 (Lua/安全/API网关/动态配置/ACME 指南)
- 模块上下文文档 (AGENTS.md)
- 开发计划文档

### Tests

- handler/logging/middleware/server/proxy/cache/loadbalance/security 等模块单元测试
- 核心模块基准测试与回归检测

---

## Initial Development - 2026-04-02 to 2026-04-03

### Project Initialization

- 项目初始化，添加 nginx 文档作为参考
- Makefile 构建脚本与程序入口
- 配置加载模块与 CLI 参数解析
- 基础 HTTP 服务器核心功能

### Core Modules (Phase 1-4)

- 应用逻辑抽取到 internal/app 包
- 信号处理与配置结构完善
- 反向代理与负载均衡实现
- SSL/TLS 与安全中间件
- 日志模块增强
- 文件缓存实现
- URL 重写与压缩中间件

### Performance & Integration (Phase 5-7)

- 访问日志中间件
- 性能优化与热升级
- 访问控制与可信代理配置
- Phase 6-7 功能完善与测试覆盖

### HTTP/3 & Advanced Features (Phase 8-9)

- HTTP/3 (QUIC) 支持
- 配置验证增强
- Brotli 压缩支持
- pprof 性能分析端点
- 故障转移支持
- 自定义错误页面
- 请求体大小限制
- try_files 配置支持
