NginxとApache HTTP Serverの違いメモ

  • 91
    いいね
  • 0
    コメント

簡単なまとめ

Apache HTTP Server

マルチプロセスモデル : 接続ごとにプロセスをフォークするのでメモリがいっぱいになりやすい

  • 利点 : メモリ空間が独立しているので、スクリプト言語が組み込みやすい
  • 欠点 : 同時接続が増えるとメモリが欠乏しやすい

→ とは言え、モジュールを使えば、イベント駆動モデルにもできるよ。Nginxには及ばないけど。

Nginx

イベント駆動モデル : 1プロセス内で、接続ごとにイベント処理を行う。1プロセス1CPUなので、CPUの数だけワーカープロセスが作成できる。

  • 利点 : 接続数が増えても、プロセス数やスレッド数が増えない。消費メモリが増えない
  • 欠点 : 1つのメモリ空間で動作するため、スクリプト言語を組み込めないことがある。

→ とは言え、プロキシサーバとして利用すれば、スクリプト言語を呼び出せるよ。

ではApache HTTP Serverを利用するメリットは

WindowsサーバだとApacheのほうが速いので、同時アクセス数が少なければ選択肢に入る。
最初から機能が豊富なので、その機能を早く利用したい場合に消極的に選択するくらいかな。。
その場合でも同時アクセスが多い場合は、Nginxをリバースプロキシにして、Apacheに流す形になるだろう。すくなくとも、圧倒的に良い部分が分からなかった。

もっと詳細

Apache HTTP Server

モジュール次第で、マルチプロセスでもマルチスレッドでもイベント駆動にもできる。が、イベント駆動としては、nginxの方が優秀。

nginx_apache.png

参照 : http://openstandia.jp/pdf/140228_osc_seminar_ssof8.pdf

Nginx

WebApplicationと連携するときには、プロキシサーバとして動作させる。
- PHP : PHP-FPMで動かし、FastCGI経由で動作させる
- Ruby : unicornで動かし、HTTPプロキシーとしてアクセスする

※ FastCGIはプロセスをメモリ上に永続化することで、起動/終了コストを削減する。

中の人はどう思ってるのか

Nginx からみた Apache

 「わたしはApacheは素晴らしいウェブサーバだと思っている。NGINXはApacheとは異なる利用事例を想定している」と同氏は述べている。「Apacheがライバルだとは思っていない。われわれの顧客は、NGINXをロードバランサや、マイクロサービスの構築に使っているが、どちらもApacheに向いた用途ではない」
 実際、Robertson氏は多くの顧客がNGINXとApacheの両方を使っていることに気づいたという。「顧客はApacheの手前で、負荷分散やアプリケーションにNGINXを使用している。NGINXのアーキテクチャはかなり異なっており、並行的にウェブサービスを提供するのに向いている」と同氏は言う。また、クラウド構成ではNGINXが有利だと述べている。

参照 : https://japan.zdnet.com/article/35092031/