魔法使いの卵

WEBエンジニアの卵の成長記録

Nginxってなんやねん

Nginxとは

  • 軽量かつ高速のwebサーバ
  • 近年ではwebサイトの約10%のシェアを獲得している

Nginxが備えている機能

  • リーバースプロキシ
  • メールプロキシ
  • 負荷分散
  • URL Rewrite
  • WebDAVなど

Nginxが生まれた理由

  • C10K問題を解決するために生まれた

C10K問題とは

いくらハードウェアスペックが高くなっても、Apache HTTPのように、
1つのリクエストを処理するのに1プロセスや1スレッドを割り当てていると、
プロセス番号やスレッドスタックのようなソフトウェアリソースが枯渇し、
万単位のクライントを処理できなくなるといった問題

ApatchとNginxの違い

  • Apatch

    • プロセス駆動型(fork型)
      • 1リクエストに対して1プロセスを使う
      • 並列で処理を行うことができる
      • しかし並列での処理が増えると負荷があがる
      • 最終的にwebサーバとしての処理が間に合わない
  • Nginx

    • イベント駆動型(select型)
      • リクエストを単一もしくは少数のプロセスで処理する
      • 発生イベントの例
1. クライアントからの接続を受け付ける
2. クライアントからのリクエストを読み込む
3. クライアントにレスポンスを返す
4. クライアントの接続を閉じる
  • これをイベント駆動型は以下のように捌く
    • ユーザAが接続した
      • リクエストの読み込みの準備ができるまで別のユーザの処理を行う
  • このようにプロセスを切り替えずにリクエストを少しずつ処理している
  • プロセスを切り替えることがないので無駄な時間とリソースを使うことなく 万単位の大量のリクエストを同時に処理できる

Nginxのメリット

  • 大量のリクエストを同時に処理することができる
  • 設定がすごい柔軟にかける(ifや変数が使える)
  • HTTPのプロトコルパーサとイベント駆動エンジンのコアを以外拡張モジュール
  • 公式で提供されている以外にもさまざまな機能を実現するためのモジュールが存在する

Nginxのデメリット

  • ドキュメント不足
  • 開発元がロシアのため読めるドキュメントが少ない
  • 特に日本語のドキュメントはかなりすくなく英語で探したほうがまだ情報がある
  • CPUのリソース消費が激しいと他の処理ができなくなるため処理能力が一気に落ちる

結局どっちがええの

  • 多数のアクセスがある場合の対応速度は どうしても遅くなる
  • この辺りは、イベント処理をうまく やることで高速性を維持できる
  • CMSのような 重い処理を nginx は得意としない
  • フロントエンドは nginx
  • バックエンドは Apache