Nginxってなんやねん
Nginxとは
- 軽量かつ高速のwebサーバ
- 近年ではwebサイトの約10%のシェアを獲得している
Nginxが備えている機能
- リーバースプロキシ
- メールプロキシ
- 負荷分散
- URL Rewrite
- WebDAVなど
Nginxが生まれた理由
- C10K問題を解決するために生まれた
C10K問題とは
いくらハードウェアスペックが高くなっても、Apache HTTPのように、 1つのリクエストを処理するのに1プロセスや1スレッドを割り当てていると、 プロセス番号やスレッドスタックのようなソフトウェアリソースが枯渇し、 万単位のクライントを処理できなくなるといった問題
ApatchとNginxの違い
-
- プロセス駆動型(fork型)
- 1リクエストに対して1プロセスを使う
- 並列で処理を行うことができる
- しかし並列での処理が増えると負荷があがる
- 最終的にwebサーバとしての処理が間に合わない
- プロセス駆動型(fork型)
Nginx
- イベント駆動型(select型)
- リクエストを単一もしくは少数のプロセスで処理する
- 発生イベントの例
- イベント駆動型(select型)
1. クライアントからの接続を受け付ける 2. クライアントからのリクエストを読み込む 3. クライアントにレスポンスを返す 4. クライアントの接続を閉じる
- これをイベント駆動型は以下のように捌く
- ユーザAが接続した
- リクエストの読み込みの準備ができるまで別のユーザの処理を行う
- ユーザAが接続した
- このようにプロセスを切り替えずにリクエストを少しずつ処理している
- プロセスを切り替えることがないので無駄な時間とリソースを使うことなく 万単位の大量のリクエストを同時に処理できる
Nginxのメリット
- 大量のリクエストを同時に処理することができる
- 設定がすごい柔軟にかける(ifや変数が使える)
- HTTPのプロトコルパーサとイベント駆動エンジンのコアを以外拡張モジュール
- 公式で提供されている以外にもさまざまな機能を実現するためのモジュールが存在する
Nginxのデメリット
- ドキュメント不足
- 開発元がロシアのため読めるドキュメントが少ない
- 特に日本語のドキュメントはかなりすくなく英語で探したほうがまだ情報がある
- CPUのリソース消費が激しいと他の処理ができなくなるため処理能力が一気に落ちる