検索
連載

高速・軽量・高機能……Nginxの基礎知識これから始める人のためのNginx(1)(1/2 ページ)

処理能力の高さなどを理由に、近年、大規模サイトを中心に急速にシェアを拡大しているWebサーバー「Nginx」。この連載では、その特徴と魅力を分かりやすく紹介します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

第3のWebサーバーとして注目を集めるNginx

 1日に数億リクエストを処理するような大規模サイトを中心に、近年急速にシェアを拡大しているWebサーバーが「Nginx(エンジンエックス)」です。HTMLドキュメントや画像ファイルといった静的コンテンツを高速で配信し、消費メモリが少なく、リバースProxyやロードバランサーといった機能も有した注目の軽量Webサーバーです。ネットクラフト社の調査によると、2014年6月時点でApache HTTP、Microsoft IISに次ぐ第3位のシェアを獲得しています。


図1 Nginxのシェア

 依然としてApache HTTPやMicrosoft IISのシェアは高いものの、Nginxの認知度は日に日に高くなっており、大規模サイトの管理者だけではなく、多くのインフラエンジニアの関心を集めるようになっています。

Nginxの誕生から現在までの経緯

 Nginxは2002年頃にロシアのIgor Sysoev氏によって、1日に5億リクエストを処理するWebサイトのHTTPサーバーとして開発されました。2004年に一般公開され、現在はBSDライクライセンス(注1)の下、LinuxやBSD系OSをはじめとするさまざまなプラットフォームで利用できるようになっています。

 Nginxの名前が知られるようになったのは、C10K問題(クライアント1万台問題、注2)が叫ばれるようになった2000年代後半です。当時、いくらハードウェアスペックが高くなっても、Apache HTTPのように、1つのリクエストを処理するのに1プロセスや1スレッドを割り当てていると、プロセス番号やスレッドスタックのようなソフトウェアリソースが枯渇し、万単位のクライントを処理できなくなるといった問題が現実味を帯び始めていました。その解決策の1つとしてNginxが注目されるようになりました。

 当時はNginxの他にも、「lighttpd」や「Boa」のような軽量Webサーバーも知られていましたが、現在ではよりパフォーマンスが高く、精力的に開発が行われているNginxが軽量Webサーバーの有望株となっています。

注1 BSDライクライセンス:Nginxには、元のBSDライセンスから、書面上の許可なく開発者の名称を派生物の推奨や販売促進に使用しないという項目を削除した「二条項BSDライセンス」が適用されています。詳細は「http://nginx.org/LICENSE」を確認してください。

注2 C10K問題:http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html参照


リバースプロキシサーバーとしても動作

 Nginxが数ある軽量Webサーバーの中で注目されている理由の1つに、リバースプロキシとして動作できる点が挙げられます。

 中規模以上のサイトでは、Webサーバー上で直接PHPやJavaのようなWebアプリケーションを実行する替わりに、リバースプロキシでリクエストを終端し、バックエンドにアプリケーションサーバーを配置するのが常とう手段となっています。


図2 リバースプロキシを使ったWebサイト構成例

 NginxはこうしたWebサイトの潮流にも対応しており、リバースプロキシとして動作させることができます。フロントにNginxを、バックエンドにアプリケーションサーバーを複数台用意し、Nginxでバランシングさせれば「ロードバランサー」として機能させることも可能です。

 NiginxはHTTPSのSSL/TLSにも対応しているため、HTTPSに対応していないアプリケーションサーバーの替わりにHTTPSリクエストを終端し、「SSL/TLSアクセラレーター」として使用するこもできます。

 他に、画像やHTMLテキストといった静的コンテツをキャッシュすることも可能です。その上、HTTPやHTTPS以外にも、SMTP、IMAP、POP3といったプロトコルのバランシングも可能。HTTPの次世代版として注目を集めている「SPDY」にも早速対応しています。

モジュールで機能を拡張

 Nginxは軽量Webサーバーでありながら、リバースプロキシやキャッシングといった機能に対応するなど、高機能さも併せ持っています。こうした付加機能はモジュールによって追加可能となっており、必要なモジュールだけを組み込むことで、無駄な機能による肥大化と、パフォーマンスの劣化を防ぎます。

 Nginxには多くのモジュールが提供されており(注3)、Apache HTTPではサードパーティが提供しているトラフィックやコネクションを制限する機能も、Nginxなら標準で提供されています。中には、動画配信に特化したものや、画像のサイズやフォーマットを変換するような変わり種も用意されています。

 なお、モジュールを組み込むにはソースファイルを再ビルドし、コアプログラムに静的に組み込む必要があります。Apache HTTPのようにコアプログラムとモジュールを別々にビルドしておき、必要に応じてロードするような動的組み込みには対応していません。

 これにもメリットはあり、静的に組み込むことでモジュールのロードに掛かる負担がなくなり、プログラムの最適化が行われます。また標準で組み込まれているようなモジュールを再ビルド時に外せば、プログラムが使用するメモリをさらに少なくできます(注4)

 Nginxのインストールをバイナリーパッケージで行う場合、組み込まれたモジュールの違いによってパッケージが複数用意されていることがあるため、インストールの前に確認しておく必要があります。

注3 http://wiki.nginx.org/Modulesで標準で組み込まれているモジュールをはじめ、オプションで追加可能なものなど、Nginxモジュールの一覧を確認できます。

注4 Apache HTTPもモジュールの静的組み込みに対応しており、用途に応じてソースをビルドすることで最適化できます。


別プロセスで動的コンテンツに対応

 NginxはHTMLドキュメントや画像ファイルといった静的コンテンツは扱えるものの、Webアプリケーションのような動的コンテンツはSSI(Server Side Include)以外扱えません。代わりに、Nginxとは別プロセスでアプリケーションプログラムを稼働し、そのプロセスとUNIXドメインソケットで連携させることで、動的コンテンツに対応させることができます。別のサーバーでアプリケーションプログラムを稼働させる場合はTCP通信を使って連携します。


図3 PHPアプリケーションに対応した場合のサーバー構成

 Nginxにはさまざまなアプリケーションのためのインターフェースが用意されています。PHPをはじめとするインタラクティブなプログラミングのための「FastCGI」、プログラミング言語のPythonで書かれたWebアプリケーションと連携するための「uWSGI」(注5)、Ruby on Railsアプリケーションのための「Phusion Passenger」といったものがあります。

注5 uWSGIでPHPを動作させるためのプラグインも提供されています。


Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る