简介
zeroserve 是一个小巧、快速、零配置的 HTTPS 服务器。你把网站打包成 tarball,它就能跑起来——支持 HTTP/2 和 TLS 1.3,自带热重载,内存占用极低。最大的亮点是:你可以在 tarball 里放入 eBPF 程序,这些程序会在每次请求时以沙箱化的中间件形式运行——改写请求、认证、限流,或反向代理到后端。
核心设计理念:程序即配置
传统服务器用声明式语言(location 块、rewrite 规则、map 指令),然后在声明式语言力有不逮时,在侧面搭载脚本运行环境(Lua 或 Caddy 插件)。行为最终被分割到两层。
zeroserve 把它们坍缩为一件事——没有配置文件。eBPF 程序就是配置:一个单一的、沙箱化的程序,看到每个请求并决定如何处理:路由、请求头、认证、限流、代理。
性能基准
在 8 核 Ryzen 7 3700X 上测试,所有服务器绑定单核:
- 小文件(174 B): zeroserve 36,681 req/s vs nginx 31,226 req/s(快 17%)
- 大文件(100 KB): zeroserve 8,000 req/s vs nginx 7,600 req/s
- eBPF vs Lua 中间件: zeroserve 43,709 req/s vs nginx Lua 28,653 req/s(快 50%)
- 反向代理(小响应): zeroserve 26,486 req/s vs nginx 21,761 req/s(快 22%)
技术架构亮点
- io_uring 驱动: 所有网络和磁盘 I/O 通过 io_uring,单线程事件循环
- 用户态 eBPF: 脚本 JIT 编译为本地机器码,指针笼保证内存安全
- 可抢占运行时: 定时器可中断正在执行的 JIT 代码
- 零磁盘部署: 站点打包在 tarball 中,从未解压到磁盘
- 完整 TLS: TLS 1.3、ECH、SNI 证书选择、JA4 指纹识别
- 内存: 单实例约 15 MB PSS,多实例共享代码页
适用场景
如果你的代理响应小而频繁,zeroserve 是更快选择;如果响应体较大,nginx 的缓冲机制更优。作为 nginx 和 Caddy 的替代方案,zeroserve 在性能、配置范式和安全性上都做出了有趣的创新。