From 638e9644f14d99f3c376bf26bbfb13627fc45416 Mon Sep 17 00:00:00 2001 From: xfy911 Date: Mon, 15 Jun 2026 15:27:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20.cocoon-plan.md=EF=BC=9A?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=83=AD=E9=87=8D=E8=BD=BD=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C465=20=E5=8D=95=E5=85=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=20+=20115=20=E9=9B=86=E6=88=90=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=85=A8=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cocoon-plan.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.cocoon-plan.md b/.cocoon-plan.md index 20479c2..f0c6e49 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -48,7 +48,7 @@ - [x] **FastCGI 协议核心** — 记录编码/解码、参数序列化、响应解析、连接池基础 - [x] **FastCGI 服务器集成** — 将 FastCGI 接入 server.c 请求处理流程,对接 PHP-FPM - [x] **反向代理连接池** — HTTP/1.1 后端连接复用,减少握手开销 -- [ ] **配置热重载校验** — 新配置语法校验失败时拒绝重载,避免把服务搞坏 +- [x] **配置热重载校验** — 新配置语法校验失败时拒绝重载,避免把服务搞坏 - [ ] **内存响应缓存** — 基于 LRU + TTL,文件不大时直接缓存到内存,避免重复磁盘 I/O - [ ] **管理 Dashboard** — 内置 `/_status` 页面,SSE 实时推送指标,像 HAProxy stats 那种 - [ ] **ACME / Let's Encrypt 自动证书** — 无需手动配置,自动签发续期 @@ -67,8 +67,8 @@ ## 当前状态 -- **编译状态**:零警告,全部通过(2026-06-15 06:17 验证) -- **单元测试**:458 个全部通过 ✓(1 个 Ignored,为预期行为) +- **编译状态**:零警告,全部通过(2026-06-15 15:17 验证) +- **单元测试**:465 个全部通过 ✓(1 个 Ignored,为预期行为) - **集成测试**:115 项全部通过 ✓ - **代码覆盖率**:核心模块覆盖完整,Phase 4 模块覆盖良好 - **文档状态**:README 完整,API 文档齐全,.cocoon-plan.md 已更新 @@ -88,6 +88,19 @@ ## 维护记录(Phase 5 — 自然扩展) +### 2026-06-15 15:17: **Phase 5 — 配置热重载校验** + - 新增 `config_validate()`: 在配置热重载前对配置进行完整校验 + - 校验项覆盖:端口、工作线程、连接数、超时、日志级别范围检查 + - 成对字段校验:TLS 证书/密钥、Basic Auth 用户名/密码必须同时存在 + - 代理规则、虚拟主机、FastCGI 规则完整性及边界校验 + - `server_reload_config()` 集成校验:新配置加载后先校验,失败则拒绝重载并保留旧配置,避免坏配置搞崩服务 + - 新增 22 项单元测试,覆盖 config_validate 全部场景 + - 编译验证:零警告,全部通过 + - 单元测试:465 个全部通过 ✓(443 原有 + 22 新增校验测试) + - 集成测试:115 项全部通过 ✓(含 SIGHUP 热重载测试,验证旧配置保留行为) + - 提交已推送到 origin main(`f037dda`) + - 项目状态:Phase 5 进行中,配置热重载校验已完成,下阶段目标:内存响应缓存 + + 2026-06-15 12:17: **Phase 5 — 反向代理连接池完善** - 新增 `proxy_pool_conn_is_alive()`: 使用 `recv(MSG_PEEK | MSG_DONTWAIT)` 非阻塞检测连接是否被对端关闭 - 复用前自动剔除失效连接,避免将已关闭的连接再次用于转发请求