はじめに
「ApacheとNginxの違い」についてあんまわかってないなと思ったので、書いていこうと思います。
一応違いがわかったら今後の執筆記事として、Apache、Nginxを用いたWebサーバの構築をやっていけたらなと思います。
それぞれの特徴・メリット・デメリット
Apache
特徴
- マルチプロセスのプロセス駆動アーキテクチャで、各リクエストをプロセスに割り当てて処理を行う
- OSSで、モジュールといった形で配布されたプログラムを使って機能拡張が可能
メリット
- 簡単にセットアップや機能拡張が可能
- 信頼性・安定性が高い
- 技術情報の取得が容易
- マルチプロセスの場合は処理が重いものでも他のプロセスに影響を与えることがないため、アプリケーション、データベース、動的コンテンツなどの重い処理が得意
デメリット
- メモリを大量消費する
- 同時アクセス数が多いと耐えられない
Ngnix
特徴
シングルスレッドモデルのイベント駆動アーキテクチャでイベントループ方式で、シングルスレッドでループ処理を回し、キューに溜まったイベントを処理していく。
よって、少量のプロセスだけで大量のリクエストを処理することが可能。
メリット
- シングルスレッドかつイベント駆動型のため、高負荷に強い
- リバースプロキシやロードバランサの機能がある
- 柔軟にカスタマイズが可能
デメリット
- イベント駆動の非同期処理であり、リクエストを完全に処理することを待たずに次々と処理を実行するため、CPUの消費が大きい処理に不向き
- 単一のメモリ空間で動作し、PHPなどのスクリプト言語を処理する機能などがないため、Nginx単体で処理をするのには向いていない
- Nginxはリクエストに対して静的ファイルを返すかリバースプロキシとして配下のアプリケーションに渡すかのどちらかとしての使用するのに適しているため、Apacheと比較し機能が少ない
- Apacheと比較し、ソースコードが複雑
まとめ
ApacheかNginxのどちらを使うのがいいのかは、用途や環境によって異なることがわかる。
例えば、同時接続数はそこまででもないけど重い処理を担当させたいのであれば、Apacheを採用したほうがいい。
逆に、同時接続数が多かったり、軽い静的コンテンツを担当させたいのであれば、Nginxが向いています。
なので、Webサーバを構築する際にどんな役割が求められているのか、想定している状況ではどちらが向いているのかを精査した上で決めると良い運用ができるのかなと思いました。
ただまーネットで調べてるだけで、正直何と無く理解したって感じなので、次の記事では構築をしていこうと思います。