rhttp/README.md

226 lines
4.0 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 - Rust HTTP Server
一个高性能、可配置的HTTP服务器用Rust编写支持多站点托管、多种代理类型和JavaScript动态配置。
## 功能特性
### ✅ 已实现
- **多站点支持** - 在单个端口上服务多个独立站点
- **基于Host头的路由** - 根据HTTP Host头部进行站点路由
- **静态文件服务** - 支持MIME类型自动识别和索引文件
- **反向代理** - 代理到后端HTTP服务
- **配置系统** - 支持TOML和JSON格式
- **日志记录** - 使用tracing框架
### 🚧 开发中
- TCP代理
- 连接池和超时控制
- JavaScript配置引擎
### 📋 计划中
- 正向代理
- SSL/TLS支持
- 负载均衡
- WebSocket支持
## 快速开始
### 安装
```bash
git clone https://github.com/yourusername/rhttpd.git
cd rhttpd
cargo build --release
```
### 配置
创建配置文件 `config.toml`:
```toml
port = 8080
[sites]
[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"
```
### 运行
```bash
# 使用默认配置
cargo run
# 使用指定配置文件
cargo run -- config.toml
```
## 配置参考
### 服务器配置
| 字段 | 类型 | 描述 |
|------|------|------|
| `port` | `u16` | 监听端口 |
| `sites` | `HashMap<String, SiteConfig>` | 站点配置映射 |
| `js_config` | `Option<String>` | JavaScript配置文件路径 |
### 站点配置
| 字段 | 类型 | 描述 |
|------|------|------|
| `hostname` | `String` | 站点主机名 |
| `routes` | `Vec<RouteRule>` | 路由规则列表 |
| `tls` | `Option<TlsConfig>` | TLS配置 |
### 路由规则
#### 静态文件
```toml
type = "static"
path_pattern = "/*"
root = "./public"
index = ["index.html", "index.htm"]
directory_listing = false
```
#### 反向代理
```toml
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://backend:3000"
```
#### TCP代理
```toml
type = "tcp_proxy"
path_pattern = "/ws/*"
target = "ws://chat-server:8080"
protocol = "websocket"
```
## 开发
### 构建和测试
```bash
# 构建
cargo build
# 测试
cargo test
# 运行单个测试
cargo test test_name
# 代码检查
cargo clippy
# 代码格式化
cargo fmt
# 文档生成
cargo doc --open
```
### 项目结构
```
rhttpd/
├── src/
│ ├── main.rs # 应用程序入口
│ ├── lib.rs # 库根
│ ├── config/ # 配置管理
│ ├── server/ # 服务器实现
│ ├── proxy/ # 代理功能
│ └── js_engine/ # JavaScript集成
├── tests/ # 集成测试
├── doc/ # 文档
├── public/ # 静态文件示例
├── static/ # 静态文件示例
├── config.toml # 配置示例
└── AGENTS.md # 开发者指南
```
## 示例
### 基本静态网站
```toml
port = 8080
[sites."mysite.com"]
hostname = "mysite.com"
[[sites."mysite.com".routes]]
type = "static"
path_pattern = "/*"
root = "./www"
index = ["index.html"]
```
### API服务器代理
```toml
[sites."api.example.com"]
hostname = "api.example.com"
[[sites."api.example.com".routes]]
type = "reverse_proxy"
path_pattern = "/*"
target = "http://localhost:3001"
```
### 混合配置
```toml
[sites."example.com"]
[[sites."example.com".routes]]
type = "static"
path_pattern = "/static/*"
root = "./assets"
[[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://backend:3000"
```
## 贡献
欢迎贡献代码!请查看 [AGENTS.md](AGENTS.md) 了解开发指南。
## 许可证
MIT License
## 性能
rhttpd基于以下高性能Rust库构建
- `tokio` - 异步运行时
- `axum` - HTTP框架
- `hyper` - HTTP实现
- `reqwest` - HTTP客户端
## 支持
如有问题或建议请提交Issue或Pull Request。