Web - NginxとApacheの違い
ナビゲーションに移動
検索に移動
Apache HTTP Server
- マルチプロセスモデル
- 接続毎にプロセスをフォークするのでメモリが多く消費される。
- 利点
- メモリ空間が独立しているので、スクリプト言語が組み込みやすい。
- 欠点
- 同時接続が増えるとメモリが不足しやすい。
- ただし、モジュールを使用すれば、イベント駆動モデルにもできる。(Nginxには及ばない)
- その他
- モジュール次第で、マルチプロセスでもマルチスレッドでもイベント駆動にもできるが、イベント駆動としてはnginxの方が優秀である。
Nginx
- イベント駆動モデル
- 1プロセス内で、接続ごとにイベント処理を行う。
- 1プロセス1CPUなので、CPUの数だけワーカープロセスが作成できる。
- 利点
- 接続数が増えても、プロセス数やスレッド数が増えないので、メモリの消費が少ない。
- 欠点
- 1つのメモリ空間で動作するため、スクリプト言語を組み込めないことがある。
- ただし、プロキシサーバとして利用すれば、スクリプト言語を呼び出せる。
- その他
- WebApplicationと連携するときには、プロキシサーバとして動作させる。
- PHP : PHP-FPMで動かし、FastCGI経由で動作させる。
- Ruby : unicornで動かし、HTTPプロキシとしてアクセスする。
※ FastCGIはプロセスをメモリ上に永続化することで、起動/終了コストを削減する。
参照 : http://openstandia.jp/pdf/140228_osc_seminar_ssof8.pdf
Apache HTTP Serverを利用するメリット
WindowsサーバだとApacheの方が処理が速いので、同時アクセス数が少なければ選択肢に入る。
また、標準機能が豊富なので、その機能を早く利用したい場合は選択する。
その場合でも、同時アクセスが多い場合は、Nginxをリバースプロキシにして、Apacheに流す形になる。
Nginxから見たApache
Robertson氏は「私は、Apacheは素晴らしいWebサーバだと思っている。NginxはApacheとは異なる利用事例を想定している。
Apacheがライバルだとは思っていない。われわれの顧客は、Nginxをロードバランサや、マイクロサービスの構築に使っているが、
どちらもApacheに向いた用途ではない。」と述べている。
実際、Robertson氏は、多くのユーザがNginxとApacheの両方を使っていることに気付いたという。
「顧客はApacheの手前で、負荷分散やアプリケーションにNginxを使用している。
Nginxのアーキテクチャはかなり異なっており、並行的にWebサービスを提供するのに向いている。」と同氏は言う。
また、クラウド構成ではNginxが有利だと述べている。