個人環境でnginxを使うようになったので、nginxを使う上での利点について軽く整理する。
nginxの主な用途
- Webサーバ
Apache HTTPとよく比較される - 静的コンテンツサーバ 画像・htmlなどの静的コンテンツをキャッシュする
- リバースプロキシ
リクエストを終端してバックエンドのアプリケーションサーバ、コンテンツサーバに処理を投げる。
複数アプリケーションサーバを用意してLBとしても使える - SSLアクセラレータ
アプリケーションサーバの代わりにSSL/TLS関連の重い処理を引き受ける
なぜnginxはリクエストを高速にさばけるのか
一般的に、同時に複数の処理をさばくためには、ディスクやネットワークなどのI/O多重化が必要。
nginxでは、I/O多重化を実現するためにepollシステムコールを使用している。
epollにおいては、ファイルディスクリプタの状態をカーネル内部で管理するために、プログラム側で1つ1つチェックする必要が無いため、
同時リクエスト数が増えたとしても処理にかかる時間は一定になる。
以上のことから、nginxは万を超える単位のリクエストも効率よく処理することができる
Apatch httpサーバではどうなのか
Apache HTTPを代表とする、プロセス・スレッドベースのマルチプロセッシングモジュール(以下、MPM)はソケットの管理に、select pollシステムコールが使われる。 これはnginxで使われているepollとは異なり、ファイルディスクリプタをプログラムが1つ1つチェックするために、処理時間が同時リクエスト数に比例する。
同時リクエスト数とメモリ使用量に関して
nginxでは、単一プロセスでリクエストをさばくので、メモリ使用量が変化することはない。
それに対して、Apache HTTPなどのMPMでは、同時リクエストのたびにプロセスやスレッドを起動するために、使用メモリ量も比例して増加する。