皆様、初めまして。滝澤と申します。今月からここで記事を書いていきますのでよろしくお願いします。
ここ1,2年で注目を集めているWebサーバnginxについて今回から数回にわたってを紹介していきます。
nginxについて初めて知った、あるいは、名前は聞いたことがあるんだけど使ったことはない、といった方のために、1回目のこの記事ではnginxの概要を、2回目の記事ではインストールと設定について紹介します。
nginxとは
nginxはロシアのIgor Sysoev氏によって開発されているWebサーバ兼リバースプロキシのソフトウェアです。「エンジン エックス」(engine x)と呼びます。
2002年に開発が始まり、2004年に公開され、今では約10%のシェアを持つまでに成長しています。facebookやWordPress.ORGなどの大規模サイトでの導入実績もあり、導入するWebサーバの選択肢の一つとして考えられます。ちなみに、2011年7月には商用サポートやコンサルティングを行う法人Nginx, Inc.が設立されています。
シェア
英国のインターネット サービスの調査会社NETCRAFT社による「January 2012 Web Server Survey」という調査によるとnginxのシェアはトップ サーバでは9.63%であり、Apache、Microsoftに続いて3位となっています。アクティブなサイト数としてはnginxのシェアは12.18%であり、Microsoftを超えて2位となっています。2009年1月のレポートではそれぞれ1.87%、2.85%であることを踏まえると、nginxのシェアが急激に増加していることがわかります。
nginxに関する情報
日本でもこの1,2年で注目度も上がっており、nginxを利用しているサイトも増えています。しかし、ロシアで開発されているため、オリジナルの文書はロシア語であり、英語での文書もそれなりに揃ってはいますが、ロシア語のみの文書も多数あります。しかし、日本語での情報は乏しい状況です。幸いなことに、Clement Nedelcu氏の書籍『nginx HTTP Server』が日本語に翻訳され『ハイパフォーマンスHTTPサーバ nginx入門』として出版されています。この書籍は入門書としての位置づけであり、取っかかりをつかむには良い本でしょう。しかし、実運用上はウェブアプリケーションと連携して利用することがほとんどなのですが、それについて十分な記載があるとはいえません。そのため、本ブログの次回以降ではそのあたりのノウハウやモジュールの機能について紹介していきます。
nginxの特徴
次のような特徴があります。
C10K問題
nginxは「C10K問題」(クライアント1万台問題)に対応したWebサーバです。従来のWebサーバでは同時接続数が増えると、プロセス数やスレッド数が増えて、メモリを食いつぶしたり、コンテキストスイッチのオーバーヘッドが大きくなることにより本来の処理に時間が割けなくなったりします。nginxではマルチスレッドを使わずに、イベント駆動のアーキテクチャを採用することにより、このC10K問題に対応するような仕組みを設けております。このため、メモリの使用量も抑えることができ、メモリが少ないサーバでもそれなりに快適に動作します。
静的なコンテンツを提供するWebサーバ
nginxはWebサーバとして静的なコンテンツを提供します。ファイル記述子の情報をキャッシュするといった性能を上げるための様々な工夫が用意されています。
動的なコンテンツはnginx単体では提供できません。次に述べるようなWebアプリケーションサーバと連携することにより動的コンテンツを提供します。
Webアプリケーションとの連携
nginxではWebアプリケーションを(apacheのmod_phpやmod_wsgiのように)Webサーバ自体に組み込んで動作させることはできません。WebアプリケーションをFastCGIやSCGIやuWSGIに対応したアプリケーションサーバ上で動作させて、ネットワークあるいはUNIXドメインソケットを経由して利用します。PHPの場合はPHP-FPM (FastCGI Process Manager) 上でPHPのWebアプリケーションを動作させて、nginxからはPHP-FPMと通信を行って利用します。
Webアプリケーションとの連携についても性能向上のために次のような機能が用意されています。
キャッシュ。Webアプリケーションサーバから取得したコンテンツをキャッシュできます。
memcached。Webアプリケーション側でコンテンツをmemcachedにキャッシュさせることができるときには、nginxはmemcachedからコンテンツを読み出すことができます。
ロードバランサ。ロードバランサとしての機能を持っており、複数のアプリケーションサーバを利用して負荷を分散することができます。また、利用できなくなったアプリケーションサーバを自動的に外すこともできます。
リバースプロキシ
nginxはリバースプロキシの機能を提供します。
性能向上のために次のような機能も用意されています。
キャッシュ。バックエンドのWebサーバから取得したコンテンツをキャッシュできます。
ロードバランサ。ロードバランサとしての機能を持っており、複数のバックエンドのWebサーバを利用して負荷を分散することができます。また、利用できなくなったWebサーバを自動的に外すこともできます。
機能とモジュール
nginxはモジュールにより機能を拡張できる仕組みになっており、50個近くのモジュールがあります。サードパーティのモジュールもたくさんあり、Wikiサイトで紹介されているものだけでも約80個あります。
たくさんのモジュールがありますが、それらを気軽に利用できるかというとそうではありません。この記事の執筆時点(2012年1月)でのnginxのバージョン(安定版1.0.11、開発版1.1.13)では、ビルドするときにしかモジュールを組み込むことができません。あるモジュールを利用する可能性が少しでもあれば、そのモジュールをビルド時に組み込んでおかないと再びビルドし直すことになります。このため、OSのパッケージ管理システムで提供されているnginxのパッケージではほとんどのモジュールが組み込まれています。 ちなみに、Igor Sysoev氏へのインタビュー記事によると、次のメジャーリリースで起動時にモジュールをロードできるようにする計画があるとのことです。
今回はここまでです。次回はnginxのインストールと設定について説明します。