rhttp/CHANGELOG.md

336 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变更日志
本文档记录rhttpd项目的所有重要变更。
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)
并且本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
## [未发布]
### 修复
- ✅ 修复ForwardProxy的Clone trait实现
- ✅ 修复TcpProxyManager的Clone trait实现
- ✅ 确保项目编译通过
- ✅ 验证所有测试通过7个测试
- ✅ 通过clippy代码检查
### 计划中
- [ ] TCP代理协议检测
- [ ] WebSocket消息解析和转发
- [ ] 完整SSL/TLS支持
- [ ] 完整JavaScript运行时集成
## [0.2.0] - 2025-01-15
### 新增
- 🌊 **TCP代理支持**
- 原始TCP流量转发
- WebSocket协议代理框架
- 协议检测和路由
- 🔄 **连接池管理**
- HTTP连接复用
- 连接保活机制
- 连接数限制
- 空闲连接清理
- ⚖️ **负载均衡**
- 轮询 (Round Robin) 算法
- 最少连接 (Least Connections) 算法
- 加权轮询 (Weighted Round Robin) 算法
- IP哈希 (IP Hash) 算法
- 随机选择 (Random) 算法
- 🏥 **健康检查机制**
- HTTP健康检查端点
- TCP连接健康检查
- 后端服务状态监控
- 故障检测和恢复
- 响应时间统计
- 🛠️ **配置增强**
- 连接池配置选项
- 健康检查配置选项
- 多种负载均衡策略配置
### 变更
#### 新增模块
- `proxy/tcp_proxy.rs` - TCP和WebSocket代理实现
- `proxy/connection_pool.rs` - HTTP连接池管理
- `proxy/load_balancer.rs` - 负载均衡策略实现
- `proxy/health_check.rs` - 健康检查系统
#### 配置增强
```toml
# 新增连接池配置
[connection_pool]
max_connections = 100
idle_timeout = 90 # 秒
# 新增健康检查配置
[health_check]
interval = 30 # 秒
timeout = 5 # 秒
path = "/health"
expected_status = 200
# 增强的负载均衡配置
[[sites."example.com".routes]]
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://backend:3000"
[sites."example.com".routes.load_balancer]
strategy = "round_robin" # round_robin, least_connections, weighted_round_robin, ip_hash, random
upstreams = ["http://backend1:3000", "http://backend2:3000"]
weights = [1, 2] # 可选的权重配置
```
#### API增强
- `ConnectionPool` - HTTP连接池管理
- `LoadBalancer` - 负载均衡器
- `HealthChecker` - 健康检查器
- `TcpProxyManager` - TCP代理管理器
#### 测试覆盖
- 新增连接池测试 (1个测试)
- 新增负载均衡测试 (1个测试)
- 现有测试7个全部通过
### 技术细节
#### 新增依赖
- `tokio-tungstenite` - WebSocket支持
- `base64` - WebSocket握手支持
- `sha1` - WebSocket认证支持
- `rand` - 负载均衡随机选择
#### 性能优化
- 连接池减少连接建立开销
- 负载均衡提高后端利用率
- 健康检查快速故障转移
- 异步架构保证高并发性能
#### 安全增强
- 连接数限制防止资源耗尽
- 超时机制防止连接堆积
- 健康检查确保服务可用性
### 文档更新
- README.md - 新增v0.2.0功能介绍
- AGENTS.md - 更新开发指南
- roadmap.md - 新增详细实现计划
- CHANGELOG.md - 版本变更记录
### 配置示例
#### TCP代理配置
```toml
[[sites."ws.example.com".routes]]
type = "tcp_proxy"
path_pattern = "/ws/*"
target = "ws://websocket-server:8080"
protocol = "websocket" # tcp, websocket, http
```
#### 负载均衡配置
```toml
[[sites."api.example.com".routes]]
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://primary-backend"
[sites."api.example.com".routes.load_balancer]
strategy = "least_connections"
upstreams = [
"http://backend1:3000",
"http://backend2:3000",
"http://backend3:3000"
]
weights = [3, 2, 1] # 权重配置
```
#### 健康检查配置
```toml
[health_check]
interval = 30 # 检查间隔(秒)
timeout = 5 # 超时时间(秒)
path = "/health" # 健康检查路径
expected_status = 200 # 期望的状态码
```
## [0.1.0] - 2025-01-15
### 新增
- 🏗️ **基础HTTP服务器框架**
- 基于axum的异步服务器
- 支持多站点托管
- 基于Host头的路由
- 📁 **静态文件服务**
- 自动MIME类型检测
- 索引文件支持
- 目录访问控制
- 🔀 **反向代理**
- HTTP请求转发
- 头部重写和传递
- 请求/响应体转发
- ⚙️ **配置系统**
- TOML格式支持
- JSON格式支持
- 配置验证机制
- 🧙 **JavaScript配置基础**
- JS配置文件解析 (简化版)
- 与TOML/JSON配置集成
### 技术细节
#### 依赖
- `tokio` - 异步运行时
- `axum` - HTTP框架
- `hyper` - HTTP实现
- `reqwest` - HTTP客户端
- `serde` - 序列化/反序列化
- `toml` - TOML解析
- `mime_guess` - MIME类型检测
- `tower-http` - HTTP服务工具
- `tracing` - 日志记录
#### 项目结构
```
rhttpd/
├── src/
│ ├── main.rs # 应用程序入口
│ ├── lib.rs # 库根
│ ├── config/ # 配置管理
│ ├── server/ # 服务器实现
│ ├── proxy/ # 代理功能
│ └── js_engine/ # JavaScript集成
├── tests/ # 集成测试
├── doc/ # 文档和需求
├── public/ # 静态文件示例
├── static/ # 静态文件示例
├── config.toml # TOML配置示例
├── config.js # JavaScript配置示例
├── README.md # 项目文档
├── AGENTS.md # 开发者指南
├── roadmap.md # 开发路线图
└── CHANGELOG.md # 变更日志
```
#### 测试结果
- ✅ 3个单元测试通过
- ✅ 2个集成测试通过
- ✅ 所有代码符合clippy规范
- ✅ 项目可正常构建和运行
### 配置示例
#### 基本配置
```toml
port = 8080
[sites."example.com"]
hostname = "example.com"
[[sites."example.com".routes]]
type = "static"
path_pattern = "/*"
root = "./public"
index = ["index.html"]
[[sites."example.com".routes]]
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://localhost:3000"
```
#### JavaScript配置示例
```javascript
export default {
port: 8080,
sites: {
"api.example.com": {
hostname: "api.example.com",
routes: [
{
type: "reverse_proxy",
path_pattern: "/v1/*",
target: "http://localhost:3001",
rewrite: {
"^/v1": "/api/v1"
}
}
]
},
"static.example.com": {
hostname: "static.example.com",
routes: [
{
type: "static",
path_pattern: "/*",
root: "./static",
index: ["index.html"]
}
]
}
},
// JavaScript中间件示例
middleware: async function(req) {
console.log(`Request: ${req.method} ${req.url}`);
return null; // 返回null继续处理或返回Response直接响应
}
};
```
### 使用示例
#### 启动服务器
```bash
# 使用默认配置
cargo run
# 使用指定配置文件
cargo run -- config.toml
# 使用JavaScript配置
cargo run -- config.js
```
#### 测试
```bash
# 运行所有测试
cargo test
# 运行单个测试
cargo test test_name
# 代码检查
cargo clippy
# 代码格式化
cargo fmt
# 文档生成
cargo doc --open
```
---
## 版本说明
### 版本号规则
- **主版本号**: 不兼容的API修改
- **次版本号**: 向下兼容的功能性新增
- **修订号**: 向下兼容的问题修正
### 发布周期
- **主版本**: 根据需要发布
- **次版本**: 每季度发布
- **修订版**: 根据需要发布
### 分支策略
- **main**: 稳定版本
- **develop**: 开发版本
- **feature/***: 功能分支
---
*最后更新: 2025年1月15日*