はじめに
webアプリケーション作成の前にwebサーバーの構成を学んでいきたいと思います。
今回はその中でもミドルウェアにフォーカスし、Linuxでの開発時によく用いられるApacheとNginxの比較についてまとめます。
サーバーの構成
ApacheとNginxの比較をする前に開発の中でどの部分に位置するか説明します。
サーバーの構成は上記の図のようになっておりハードウェア(パソコンなどの機器本体)の上に、OSやミドルウェアがのっています。
OSはコンピュータを操作するための基本的な機能を担うことろで、もしOSが入ってないと機器があるだけでその機器の画面は真っ暗で何も動きません。
今回学んでいくミドルウェアとは、さまざまなアプリケーションに対して特定の機能の提供をする部分です。
具体的にはクライアントからの要求に応えwebページを表示するなどだれもが使うような機能です。ミドルウェアにはデータベースを管理するソフトウェアやHTML文書を表示するソフトウェアなど様々あります。
Apacheとは
Apacheソフトウェア財団によって開発されたOSSで、元々は米国立スーパーコンピュータ応用研究所 (NCSA) が開発したNCSA HTTPdに改良という形で開発が行われました。その後、2000年頃にBrian Behlendorf(ブライアン・ベレンドルフ)の手によってソースコードは完全に書き換えられました。
【メリット】
・機能拡張が簡単できる
・信頼性や安定性が高い
・重い処理が得意
【デメリット】
・メモリを大量に消費する
・同時処理数に弱い
Nginxとは
NginxはNginx,Inc.のCTOのイーゴリ・ウラジーミロヴィチ・シソエフによって開発されたOSSで、2002年に開発が始まり、2004年に初公開されました。
C10K問題というApacheの仕組み上発生しうる、同時接続するクライアントが多すぎるとサーバーがパンク問題がありその問題をきっかけに開発され始められました。
【メリット】
・速くて高負荷に強い
・リバースプロキシやロードバランサの機能がある
・柔軟にカスタマイズできる
【デメリット】
・CPUリソースがたくさん必要な処理は不向き
・Nginx単体で完結させるのは難しい
・機能が少ない
・ソースコードが複雑
おわりに
ApacheとNginxそれぞれ優れている部分と劣る部分があります。
たとえば大規模の開発や安定が求められうようなシステムではNginxが向いていますが、そこまのスペックが必要ない場合は比較的簡易なApacheの開発の方が向いているかと思います。