[Nginx]Nginxとは

前回は、性能改善の結果についてご紹介しました。
今回は、Nginxについてご紹介します。

弊社の記事でも数週間ほど前から登場しているNginxですが、どのようなものかご存じでしょうか?
分からない方もいると思うので、Nginxについて簡単にまとめました。

まず初めに、NginxというのはWebサーバーです。
Webサーバーというのは、クライアントからのHTTP通信要求に対して、文字列やバイナリデータを返却するものを指します。
Webサイトであれば、ブラウザ(クライアント)からの表示要求に対してHTML(文字列)や画像(バイナリ)等を返却したり
WebAPIでは、JSON/XML/CSVといった文字列を返却したりと、Webサービスには様々なものがあります。
Webサーバーがなければ、通信を行うことが出来ないため、これらのWebサービスを機能させるうえで必ず必要となるものです。

他に有名なWebサーバーとしては、Apacheというものがあり、MySQL・PHPと組み合わせて利用されることが多いです。
上記組み合わせの環境を一括して構築するためのパッケージソフトとして
XAMPP(Windows/Mac/Linux/Solaris用)やLAMP/MAMP(Linux/Mac用)といったものがあるため
あまり意識せずにApacheを使用しているかたも多いのではないでしょうか。
Apacheは世界で最も多く使用されているWebサーバーで、現在も高い人気があります。

そんな中、Nginxを使用する理由は、軽量で高速に動作し処理性能が高いという点です。
リバースプロキシやロードバランシング機能を扱うことができ高性能ということも、Nginxが注目されてきている大きな理由となっています。
ただし、これだけでApacheからNginxに乗り換えるという行動をとるのは待ってください。
先ほど、Nginxが高速といいましたが、Apacheのほうが有利な点も存在します。
それは、動的コンテンツの処理です。
Nginxは、htmlやcssといった静的コンテンツの処理に関しては、Apacheに比べて高速に動作しますが
php等の動的コンテンツの処理についてはApacheのほうが得意なようです。
そのため、フロントエンドをNginx・バックエンドをApacheという形の構成で使用されていることが多くなっています。
この構成は、Nginxをリバースプロキシとして動作させ、静的コンテンツ要求であればそのままNginxで処理を行い
動的コンテンツの要求の時はバックエンドのApacheにリクエストを投げて処理を委託する形になります。

図で示すと下記のようなイメージです。

バックエンドのアプリケーションサーバーを複数台用意し、Nginxにロードバランサ―としての役割を担わせることも可能です。

NginxがApacheと比べて、動的コンテンツ処理性能が低いからといって、動作させることが出来ないわけではありません。
無理に上記構成にせずとも、Nginxには別プロセスを利用して動的コンテンツを処理する機能が提供されています。
たとえば、phpを動かす場合はphp-fpmというCGIを使用することでphpプログラムを動かすことが出来ますし
uWSGIを利用することで、pythonを動かくことも出来ます。
CGIとは、Webサーバー上でユーザプログラムを動作させる仕組み(※1)です。

NginxがApacheより優れている点として、多くのリクエストを同時に処理する点に長けているということも挙げられます。
Apacheは昔から、マルチプロセス/マルチスレッドモデルを採用(※2)しており、クライアントのリクエストに比例してプロセスが生成されるため、メモリの消費量が増えてしまいます。
これらに対して、Nginxではリクエスト処理方法にイベント駆動型モデルを採用しているため、プロセス・スレッドがそれぞれ1つずつしか生成されず
メモリの消費を抑えることができ、クライアントからのリクエスト処理を高速に捌く(※3)ことができます。

このようにNginxは、Apacheと比べて多くの利点があり、今後さらにシェア率を伸ばしていくことが予想されます。
NginxとApacheの比較と調べると、ベンチマークの結果を見ることが出来ますが、弊社ではまだ試していないため
○○のようなウェブサイトを作る時、△△のようなウェブアプリケーション構成の時ではどちらを選択するのが良いのか
といった色々な観点から双方の処理性能比較を行い、今後の技術日誌で公開する予定です。
是非楽しみにしていてください。

※1.wikipedia抜粋です。詳しくはこちら
※2.Apache2.4からはevent_mpmというモジュールが標準で採用されてイベント駆動型になっています
※3.更に詳しく知りたい方は、イベント駆動型・I/O多重化等で検索してください


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*