概要
zeroserve は、ゼロ設定・高速・小型のHTTPSサーバー。 eBPFミドルウェア による柔軟なリクエスト処理を特徴。 tarファイル一つ でWebサイト全体を配布・ホットリロード可能。 nginxやCaddy と比較して多くのワークロードで高速。 設定ファイル不要、eBPFプログラムが全ての挙動を制御。
zeroserve:次世代ゼロ設定HTTPSサーバーの特徴
- 小型・高速・ゼロ設定 サーバーとして設計
- サイト全体を tarファイル一つ で管理・配信
- ディレクトリをパッケージングし、そのまま配信
- デプロイはtarファイルの置き換えとSIGHUPシグナル送信のみ
- HTTP/2 ・ TLS 1.3 ・ Encrypted Client Hello ・ SNI証明書選択 ・ JA4フィンガープリント など最新TLS機能を内蔵
- io_uring による全I/O処理
- シングルスレッド・イベントループ駆動
- 複数プロセスによるスケーリングを想定
eBPFによる柔軟なリクエスト処理
- .zeroserve/scripts/ 配下のCファイルをeBPFバイトコードにコンパイル
- ユーザ空間 でサンドボックス実行
- async-ebpf ランタイムによりJITコンパイル・プリエンプト対応
- 全リクエストごと にeBPFスクリプト実行
- リクエスト検査・書き換え、認証、レートリミット、リバースプロキシ等
- スクリプトチェーン としてファイル名順に実行
- zs_respond や zs_reverse_proxy でチェーンをショートサーキット
- メタデータ共有 でリクエスト単位の情報やヘッダ追加・テンプレート変数展開
- メモリ制限 (256KB)、 タイムスライス による暴走防止
設定ファイル不要・プログラムによる全制御
- 設定ファイルなし、eBPFプログラムが全ての挙動を記述
- ルーティング、認証、ヘッダ操作、レートリミット、プロキシ制御などを一元管理
- 全リクエストパス を一つのプログラムで上から下まで見通し良く記述可能
静的ファイル配信・ホットリロード
- tarファイル をインデックス化し、パス→バイトレンジで直接配信
- ディスク上に展開せず、 ドキュメントルート不要
- 配信中の ホットリロード 対応(TLS証明書含む)
eBPFスクリプトの例と機能
- リクエスト情報取得・ヘッダ追加
- クライアントIP取得や全レスポンスにカスタムヘッダ付与
- テンプレート変数展開
- HTML内のプレースホルダをメタデータで置換
- 暗号化・エンコード支援
- SHA-256、HMAC、base64、getrandomなど
- JSONパース・レスポンス
- リクエストボディのJSON解析・動的JSONレスポンス生成
- レートリミット
- IPやAPIキー単位のトークンバケット方式
- AWS SigV4/OIDC対応
- S3アクセスや「Googleでログイン」ゲートもサポート
- 動的エンドポイント
- path判定で/health等のAPIレスポンスも容易に実装
ベンチマークとパフォーマンス
- nginx 1.26 ・ Caddy 2.11 との比較
- Ryzen 7 3700X(8コア)で 1コア単位 の公平な比較
- 小型静的ファイル(174B)
- zeroserve: 36,681 req/s, p99 5.4ms
- nginx: 31,226 req/s, p99 7.8ms
- Caddy: 12,830 req/s, p99 22ms
- 大型静的ファイル(100KB)
- zeroserve: 8,000 req/s, 782MB/s, p99 22ms
- nginx: 7,600 req/s, 773MB/s, p99 28ms
- Caddy: 6,084 req/s, 590MB/s, p99 44ms
- eBPF vs LuaJIT(nginx Luaモジュール)
- ヘッダ挿入ミドルウェア:zeroserve eBPF(10ms)43,709 req/s > nginx Lua 28,653 req/s
- 完全動的JSON応答:zeroserve eBPF(10ms)46,945 req/s > nginx Lua 41,231 req/s
- プリエンプトタイマー間隔 調整でパフォーマンス最適化
- リバースプロキシ性能(小型レスポンス)
- zeroserve: 26,486 req/s, p99 8ms
- nginx: 21,761 req/s, p99 10.5ms
- Caddy: 7,683 req/s, p99 33ms
- リバースプロキシ性能(大型ボディ)
- nginxがバッファリングで優位、zeroserveはやや劣る
zeroserveの運用・設計思想
- 単一tarファイル運用 でセキュリティ・管理性向上
- スクリプトが唯一の設定、挙動の全体像を把握しやすい
- 複雑な構成や拡張もeBPFスクリプトで柔軟に対応
- nginxやCaddyの宣言的設定+スクリプトの二層構造 を一元化
zeroserveのメリット・用途
- シンプルな静的サイト配信 から APIゲートウェイ、 認証付きサイト まで幅広く対応
- デプロイ・ロールバック の容易さ(tarファイル差し替えのみ)
- 高性能・低フットプリント で小規模から大規模まで運用可能
- 高度なセキュリティ機能 (TLS 1.3、ECH、JA4等)を標準搭載
- 将来的な構成変更・拡張 もスクリプト一つで完結
zeroserve導入時の注意点・制約
- シングルスレッド設計 のため、1プロセスあたりの限界あり
- スケールはプロセス数で調整
- バイナリサイズやメモリ制約 に注意
- 大容量リバースプロキシ用途 ではnginx等が依然優位な場合あり
- eBPFスクリプト開発 にはC言語知識が必要
まとめ
- zeroserve は、 ゼロ設定・高速・柔軟性 を兼ね備えた新世代HTTPSサーバー
- eBPFスクリプト による全リクエスト制御で、 設定ファイル不要 ・ 全挙動一元管理 を実現
- 静的サイト配信・APIゲートウェイ・認証付きサイト まで幅広く対応可能
- nginxやCaddy の代替として、 シンプルさとパフォーマンス を求める現場に最適