# nginx
**nginx**(エンジンエックス)は、[[C10K問題]] の解法を体現したイベント駆動型 Web サーバ・リバースプロキシ・ロードバランサである。Igor Sysoev が 2004 年にリリース。
## 設計の核心
- OS が提供する**最高効率のイベント通知機構を自動選択**する — Linux では [[epoll]]、BSD/macOS では [[kqueue]]、Solaris では `/dev/poll`。
- シングルスレッドのイベントループで数万の同時接続を処理。スレッドコンテキストスイッチコストを排除。
- **マスター/ワーカープロセスモデル** — マスターが設定・ソケット管理、複数ワーカーが接続処理を担当。ワーカー数は通常 CPU コア数に一致。
## [[C10K問題]] との関係
[[C10K-Problem]] に「イベント駆動型の実用実装例」として登場する(記事ではシンプルに言及されている)。nginx は [[C10K問題]] が示した I/O 戦略2(エッジトリガ非ブロッキング I/O)を完全に実装し、Apache の process-per-connection モデルに代わって大規模サービスのデファクト Web サーバとなった。
## 拡張フレームワークとしての評価
[[@2025__OSDI__Extending Applications Safely and Efficiently]] は、Nginx をリバースプロキシとして用い、ファイアウォール拡張を [[Lua]]、[[WebAssembly]]、[[ERIM]]、[[RLBox]]、[[bpftime]] の各拡張フレームワークで実装して比較した。bpftime はネイティブ Nginx に対して 2% のスループットオーバーヘッドにとどまり、Lua/WebAssembly の 11-12% や ERIM/RLBox の 9-11% と比較して最大 5.5× 低いオーバーヘッドを達成した。Nginx はもともと拡張性を意識して設計されているため、開発時 EIM 仕様の作成が比較的容易であったと報告されている。(Source: [[@2025__OSDI__Extending Applications Safely and Efficiently]])
## 関連
- [[C10K問題]] — nginx の設計思想の背景
- [[epoll]] — Linux 上でのバックエンド
- [[kqueue]] — BSD/macOS 上でのバックエンド