# Rust HTTP服务器实现需求 ## 项目概述 使用Rust实现一个高性能、可配置的HTTP服务器,支持多站点托管、多种代理类型和JavaScript动态配置。 ## 核心功能需求 ### 1. 多站点支持 - 在单个端口(如80/443)上服务多个独立站点 - 基于HTTP `Host`头部进行站点路由 - 每个站点有独立配置和资源隔离 ### 2. 路径配置系统 ``` 站点配置示例结构: { "example.com": { "/api/*": "反向代理到 http://backend:3000", "/static/*": "静态目录 ./public", "/blog": "正向代理处理", "/ws/*": "TCP代理到 ws://chat-server:8080" } } ``` ### 3. 请求处理类型 - **静态资源服务**: - 文件系统映射 - MIME类型自动识别 - 缓存控制头支持 - 目录列表(可选) - **反向代理**: - 支持HTTP/HTTPS后端 - 连接池管理 - 请求/响应头重写 - 负载均衡(轮询/最少连接) - **正向代理**: - CONNECT方法支持 - 认证机制 - 访问控制列表 - **TCP代理**: - 原始TCP流量转发 - WebSocket协议支持 - 自定义协议代理 ### 4. JavaScript配置引擎 - 嵌入V8/Deno或QuickJS引擎 - 支持热重载配置 - 配置验证和错误报告 - 运行时动态路由修改 ## 技术栈建议 ### HTTP服务器框架 ```toml [dependencies] # 选择以下之一作为基础: tokio = { version = "1.0", features = ["full"] } async-std = "1.0" # HTTP库 hyper = "1.0" warp = "0.3" axum = "0.7" # 或更底层的 tower = "0.4" ``` ### JavaScript引擎选项 ```toml # 选项1: Deno核心(V8) deno_core = "0.200" # 选项2: QuickJS(轻量级) rquickjs = "0.4" # 选项3: Boa(纯Rust实现) boa_engine = "0.17" ``` ### 其他关键依赖 ```toml [dependencies] # 配置管理 serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" toml = "0.7" # 静态文件服务 tower-http = { version = "0.4", features = ["fs", "trace"] } mime_guess = "2.0" # 代理功能 hyper-reverse-proxy = "0.5" reqwest = { version = "0.11", features = ["json"] } # TCP处理 tokio-util = { version = "0.7", features = ["codec"] } tokio-native-tls = "0.3" # 路由 matchit = "0.7" regex = "1.0" ``` ## 架构设计要点 ### 1. 核心组件结构 ```rust struct ProxyServer { config: Arc>, sites: HashMap, js_engine: JsEngine, runtime: Runtime, } struct Site { hostname: String, routes: Vec, certificates: Option, } enum RouteRule { Static { path_pattern: String, directory: PathBuf, options: StaticOptions, }, ReverseProxy { path_pattern: String, upstreams: Vec, options: ProxyOptions, }, TcpProxy { path_pattern: String, target: SocketAddr, protocol: ProtocolType, }, } ``` ### 2. 配置系统 ```javascript // config.js 示例 export default { port: 8080, sites: { "api.example.com": { "/v1/*": { type: "reverse_proxy", target: "http://localhost:3001", rewrite: { "^/v1": "/api/v1" } } }, "static.example.com": { "/*": { type: "static", root: "./static", index: ["index.html"] } } }, // JavaScript中间件 middleware: async function(req) { console.log(`Request: ${req.method} ${req.url}`); return null; // 返回null继续处理,或返回Response直接响应 } } ``` ### 3. 请求处理流程 ``` 请求接收 → 解析Host头 → 查找站点配置 → 匹配路由规则 → JavaScript中间件处理 → 执行对应处理器 → 返回响应 ``` ## 实现优先级建议 ### Phase 1: 基础框架 1. 基本HTTP服务器 2. 基于Host头的路由 3. 静态文件服务 4. 简单配置(JSON/TOML) ### Phase 2: 代理功能 1. 反向代理实现 2. TCP代理基础 3. 连接池和超时控制 ### Phase 3: JavaScript集成 1. 嵌入JS引擎 2. JS配置文件支持 3. 动态路由更新 ### Phase 4: 高级特性 1. SSL/TLS支持 2. 健康检查 3. 监控和日志 4. 性能优化 ## 关键难点解决方案 ### 1. 热重载配置 - 使用inotify/watch监听配置文件变化 - 原子配置切换避免锁竞争 - 优雅关闭旧连接 ### 2. 内存安全 - 合理使用Arc/RwLock共享配置 - 连接数限制和超时 - 防范DDoS攻击 ### 3. 性能优化 - 连接复用(keep-alive) - 零拷贝文件传输(sendfile) - 异步I/O和并行处理 ## 测试要点 1. 多站点路由正确性 2. 代理功能完整性 3. JS配置热更新 4. 并发性能和内存使用 5. 错误处理和恢复