lolly/docs/prompts.md
xfy 9cae5ad8cf chore(init): initialize project with nginx documentation
- Add Go module initialization (go 1.26)
- Add comprehensive NGINX documentation covering:
  - Overview, installation, HTTP core module
  - Proxy/load balancing, SSL/TLS, URL rewrite
  - Compression/caching, logging/monitoring
  - Security, TCP/UDP stream, mail proxy
  - Performance tuning, Git commit guide
- Add standard Go .gitignore

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-02 11:45:53 +08:00

8.6 KiB
Raw Blame History

Lolly 项目需求文档

本文档用于指导 AI 实现一个高性能 HTTP 服务器项目。

一、项目定位

创建一个类似 nginx 的高性能 HTTP 服务器,项目名称为 lolly

核心目标

  • 实现与 nginx 相同的核心功能,但不是 1:1 复刻
  • 比 nginx 更加现代、更加易用
  • 充分利用 Go 语言特性goroutine、channel、标准库等
  • 保持高性能(高并发、低内存消耗)

技术约束

约束项 要求
语言 纯 Go 实现,不依赖 C 库
部署 静态链接,单二进制文件即可运行
配置 YAML 格式(比 nginx 的 nginx.conf 更简单易用)
兼容性 跨平台支持Linux、macOS、Windows

二、功能需求

必须实现的核心功能(参考 docs/ 目录详细文档)

2.1 HTTP 核心模块(优先级:最高)

参考:docs/03-nginx-http-core.md

  • Server/Location 配置:虚拟主机、请求路由
  • 静态文件服务:高效 serving 静态资源
  • 请求处理:请求头、请求体、超时控制
  • keep-alive:长连接支持
  • MIME 类型:自动识别内容类型

2.2 反向代理与负载均衡(优先级:高)

参考:docs/04-nginx-proxy-loadbalancing.md

  • 反向代理proxy_pass 功能
  • 负载均衡算法轮询、权重、最少连接、IP 哈希
  • 健康检查:主动/被动健康检测
  • WebSocket 支持Upgrade 协议处理
  • 代理缓存:响应缓存机制

2.3 SSL/TLS 与 HTTPS优先级

参考:docs/05-nginx-ssl-https.md

  • HTTPS 服务:证书配置
  • SSL 会话缓存:减少握手开销
  • HTTP/2 支持:现代化协议
  • 自动证书管理:可选 ACME/Let's Encrypt 集成

2.4 URL 重写与请求处理(优先级:中)

参考:docs/06-nginx-rewrite.md

  • URL 重写:灵活的路由规则
  • 重定向301/302 等状态码
  • 请求修改:添加/修改请求头

2.5 压缩与缓存(优先级:中)

参考:docs/07-nginx-compression-caching.md

  • Gzip/Brotli 压缩:响应压缩
  • 静态文件缓存:文件描述符缓存
  • 代理响应缓存:缓存代理请求结果

2.6 日志与监控(优先级:中)

参考:docs/08-nginx-logging-monitoring.md

  • 访问日志:可定制日志格式
  • 错误日志:分级日志
  • 状态监控:实时状态端点(类似 stub_status
  • 日志轮转:内置支持

2.7 安全与访问控制(优先级:高)

参考:docs/09-nginx-security.md

  • IP 访问控制:白名单/黑名单
  • 请求限制:速率限制、连接限制
  • 安全头部:自动添加安全相关 HTTP 头
  • 基础认证Basic Auth 支持

2.8 TCP/UDP Stream 代理(优先级:低)

参考:docs/10-nginx-stream-tcp-udp.md

  • TCP 代理:四层代理支持
  • UDP 代理UDP 流处理
  • Stream 负载均衡:四层负载均衡

2.9 邮件代理(优先级:最低,可选)

参考:docs/11-nginx-mail-proxy.md

  • IMAP/POP3/SMTP 代理(可后期实现或不实现)

三、配置文件设计

设计原则

配置文件采用 YAML 格式,设计原则:

  1. 简洁易用:比 nginx.conf 更直观
  2. 结构清晰:层级明确,易于理解
  3. 类型安全:配置值有明确类型
  4. 默认合理:开箱即用,最小配置即可运行

配置文件示例(仅供参考)

# lolly.yaml - 最简配置示例
server:
  listen: 8080
  name: example.com

  # 静态文件服务
  static:
    root: /var/www/html
    index: [index.html, index.htm]

  # 反向代理
  proxy:
    - path: /api
      target: http://backend:8080
      load_balance: round_robin

  # SSL/HTTPS
  ssl:
    cert: /etc/ssl/cert.pem
    key: /etc/ssl/key.pem

# 日志配置
logging:
  access: /var/log/lolly/access.log
  error: /var/log/lolly/error.log
  level: info

# 性能配置
performance:
  workers: auto  # 自动匹配 CPU 核心数
  max_connections: 10000
  keepalive_timeout: 60s

配置与 nginx 的对比

nginx 配置 lolly 配置(预期)
worker_processes auto; performance.workers: auto
listen 80; server.listen: 80
root /var/www; server.static.root: /var/www
proxy_pass http://backend; server.proxy.target: http://backend
ssl_certificate cert.pem; server.ssl.cert: cert.pem

四、架构设计要求

4.1 Go 特性利用

充分利用 Go 语言特性:

  • Goroutine:每个连接一个 goroutine天然高并发
  • Channel:进程内通信、信号处理
  • 标准库net/httpnetiosync
  • Context:请求超时控制、取消传播
  • 接口:模块化设计,接口抽象

4.2 模块化设计

lolly/
├── cmd/
│   └── lolly/
│       └── main.go          # 入口
├── internal/
│   ├── config/              # 配置解析
│   ├── server/              # HTTP 服务器核心
│   ├── proxy/               # 反向代理
│   ├── loadbalance/         # 负载均衡算法
│   ├── ssl/                 # SSL/TLS 支持
│   ├── rewrite/             # URL 重写
│   ├── cache/               # 缓存模块
│   ├── compression/         # 压缩模块
│   ├── logging/             # 日志模块
│   ├── security/            # 安全模块
│   ├── stream/              # TCP/UDP 代理
│   └── middleware/          # 中间件系统
├── pkg/
│   └── utils/               # 公共工具
└── configs/
    └── lolly.yaml           # 默认配置

4.3 性能要求

  • 单机支持数万并发连接
  • 低内存消耗(相比 nginx 同等功能)
  • 静态文件高效传输(利用 sendfile 等优化)
  • 连接复用、缓冲池

五、开发规范

5.1 提交规范

每完成一个功能点提交一次,提交格式遵循最佳实践:

<type>(<scope>): <subject>

<body>

<footer>

type 类型

  • feat: 新功能
  • fix: 修复 bug
  • docs: 文档变更
  • refactor: 重构
  • test: 测试相关
  • chore: 构建/工具相关

示例

feat(server): 实现静态文件服务功能

- 支持配置根目录和索引文件
- 实现 MIME 类型自动识别
- 支持 keep-alive 长连接

Closes #1

5.2 代码注释规范

严格遵循 docs/comments.md 规范:

  • 中文注释:所有注释使用中文
  • 文件头注释:每个文件必须有文件头注释
  • 函数注释:说明用途、参数、返回值、注意事项
  • 说明"为什么":注释解释原因,而非仅描述代码
  • TODO/FIXME:使用标准格式,标注负责人和时间

5.3 实现顺序建议

建议按以下顺序逐步实现:

  1. 第一阶段:项目骨架 + 配置解析

    • 项目目录结构
    • YAML 配置解析
    • 基本命令行参数
  2. 第二阶段HTTP 核心功能

    • 基础 HTTP 服务器
    • Server/Location 配置
    • 静态文件服务
  3. 第三阶段:代理与负载均衡

    • 反向代理
    • 负载均衡算法
    • 健康检查
  4. 第四阶段:安全与 SSL

    • SSL/TLS 支持
    • IP 访问控制
    • 请求限制
  5. 第五阶段:增强功能

    • URL 重写
    • 压缩
    • 缓存
    • 日志系统
  6. 第六阶段:高级功能

    • TCP/UDP Stream
    • 性能优化
    • 监控端点

六、参考资料

资料位置 内容
docs/01-nginx-overview.md nginx 架构、信号控制、命令行参数
docs/02-nginx-installation.md 安装构建(参考模块结构)
docs/03-nginx-http-core.md HTTP 核心模块详细功能
docs/04-nginx-proxy-loadbalancing.md 反向代理、负载均衡详细功能
docs/05-nginx-ssl-https.md SSL/HTTPS 配置详细功能
docs/06-nginx-rewrite.md URL 重写详细功能
docs/07-nginx-compression-caching.md 压缩、缓存详细功能
docs/08-nginx-logging-monitoring.md 日志、监控详细功能
docs/09-nginx-security.md 安全功能详细说明
docs/10-nginx-stream-tcp-udp.md TCP/UDP 代理功能
docs/11-nginx-mail-proxy.md 邮件代理(可选参考)
docs/12-nginx-performance-tuning.md 性能优化参考
docs/comments.md Go 代码注释规范(必须遵循)

七、其他说明

  • 本项目是学习/实验性质的高性能服务器实现
  • 优先保证代码质量和可维护性
  • 功能完整性优先于极致性能优化
  • 遇到设计决策问题时,选择"更简单易用"的方案