Nginxが支持される理由と特徴

SNS、BLOGなど、Webを使ったシステムは広く普及し、Webシステムへの依存度は増大しています。Webシステムの中核たるWebサーバには、長らくApache HTTPやMicrosoft IISが君臨していましたが、その中に食い込む勢いを持つのが「Nginx(エンジンエックス⁠⁠」です。本稿ではNginxが支持されるその特徴を紹介します。

支持される理由

Nginxが支持される理由はそのシンプルさです。軽量・高速ながら、インストールや設定は極めてシンプルです。Webサーバのチューニングや最適化に時間をかけなくても、目の前にあるPCを一瞬にして高速Webサーバに仕立てる力を持ちます。特にNginxの本領が発揮されるのは、複数のWebサーバを束ねるロードバランシングやリバースProxyといった用途です。

イベント駆動とノンブロッキング非同期I/O

Nginxの特徴として「イベント駆動」「ノンブロッキング非同期I/O」といった技術が挙げられます。

Webサーバのように同時に複数の処理を行うシステムでは、記憶領域やネットワークといったI/O処理の多重化が必要不可欠です。従来型のWebサーバはファイルやネットワークソケットなどのファイルディスクリプタをプログラム側が1つ1つチェックする方式が取られているの対し、Nginxでは各ディスクリプタの状態をシステム側のカーネル内で管理するようにしています。そのためプログラムがディスクリプタを1つ1つチェックする必要がなくなり、処理にかかる時間はリクエストによらず一定です。Nginxは高いスケーラビリティも併せ持っていますが、それを可能にしているのが、⁠ノンブロッキング非同期I/O」です。Nginx側でシステムコールの終了を待つ必要がなく、I/Oリクエストを発行した直後から別の処理を実行できます。そのため大量のデータを配信できます。

得意とするサーバ構成

Nginxが高速かつ大量のリクエストを処理できるのは比較的小さいデータやメモリにキャッシュされたデータです。そのため静的コンテンツの配信やコンテンツデリバリサービス(CDS)のような用途には適しているものの、1リクエストに長時間かかるWebアプリケーションのような処理は不得意です。代わりにフロントにNginxを置きバックエンドにアプリケーションサーバを配置するようなサーバ構成をとることがで、Nginxの真価を発揮できます。

バックエンドサーバはNginxと同じサーバに同居させることもできます。たとえばNginxをフロントエンドとして起動し、PHPスクリプトを処理するプロセスを常駐させNginxとプロセス間通信を行うことで、高速なPHPアプリケーションサーバに仕立てることができます。また処理が重いWebアプリケーションは、複数のアプリケーションサーバに分担し、それをNginxでロードバランシングさせることで、高価なロードバランサを買わなくても大規模化できます。さらにNginxでSSL/TLSを終端させ、Nginxとアプリケーションサーバとは平文通信を行うことで、SSLアクセラレータとして機能させることもできます。HTTP/2やSPDYを終端させるなどプロトコル変換機としても活躍します。

HA構成でも活躍

Nginxがロードバランシグ可能なのはWebシステムだけではありません。メールシステムやTCPストリームにも対応しています。たとえば複数台あるMySQLサーバをNginxでロードバランシングさせることでハイアベイラビリティ(HA)化できます。MySTCPストリームを使ったLDAPやRTMPといったプロトコルに対応しています。今後はこうしたHTTP以外のプロトコルでの活躍を目にするようになるでしょう。

開発が促進されるNginx

Nginxは長らく開発者のIgor Sysoev(イゴール シソエフ)さん一人の手でメンテナンスされてきましたが、2010年にNginx,Inc.が創業されたことで、開発のスピードが促進されています。今年はHTTP/2への対応や動的モジュールの採用など、Nginxにも大きな転機になるようなリリースが多数予定されており、注目を集めています。

鶴長鎮一(つるながしんいち)

現在はソフトバンク(株)に勤務。突出した知識やスキルを持つトップエンジニアとして「Technical Meister」に社内認定される。サイバー大学での講師をはじめ、幅広い業務に従事。Software Design(技術評論社)や日経Linuxへの寄稿をはじめ、著書多数。