apacheとnginxの比較表とベンチマーク

  • 252
    Like
  • 1
    Comment
More than 1 year has passed since last update.

概要

  • websocketを使ったAPサーバをmodproxyでバランシングしたいっ!
  • そうなるとapache2.4.5以降か、nginxか。
  • 調べてみました。
  • 今回はapache2.4.12。CentOSでのお話。
apache2.4.12 nginx
バージョン管理 nginx-buildで楽々。依存関係も解決
情報 2.4系は少ない 多い
動的ファイルの読み込み速度 普通 普通
静的ファイルの読み込み速度 遅い。
event_mpm(非同期型IO処理)を採用したので、チューニングすると爆速になるかも。
apache2はrailsのimgファイル読み込む際遅くなるんだよ的なの知ってる方募集
速い
設定の反映時の再起動 必要 不要
構成 centos7はyum。
centos6はソースからインストール。
yum
アーキテクチャ マルチプロセス + マルチスレッド
(ただし、event_mpmを使うとイベント駆動
イベント駆動
アーキテクチャによるメリット シンプルで分かり易い 同時接続数が増えてもプロセス、スレッドが増えないため、
オーバーヘッドも増えない。 ➡高性能
アーキテクチャによるデメリット プロセス、スレッドのオーバーヘッドが大きい。
大きな同時接続数に対応しようとすれば、
それだけ負荷が増える
特になし
開発元 コミュニティ 営利企業(Nginx Inc.)
開発者 コミュニティ nginx社員 + 一般
有償 / 無償 無償 無償だが、商用サポート購入者のみの機能がある
開発スピード(個人的感想) 遅い
過去の遺産の修正が大変みたいです。
速い
X-Forward-for
(プロキシした際、送信元IPをログに吐く)
投入したバージョンに適したmod_rpafを適用する 基本機能で付いている。
DoS対策 mod_dosdetector nginx-maxconn-module
個人的にapache2.4系から期待している機能 mod_spdyでSPDY対応(nginxは対応ずみ)

nginxでのX-Forward-for設定方法

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

abテスト

  • 下記の3つで戦わせます
    • apache2.4.12(with prefork)
    • apache2.4.12(with event_mpm)
    • nginx(1.7)
  • どちらもインストールしたばかりのチューニングなし状態
  • apacheって2.4.5からMaxClient➡MaxRequestWorkerって項目になってるんですね。。
  • リクエスト数は10000固定。
  • コマンドは、例えば同時接続数100の場合、
同時接続数 apache2.4.12(with prefork) apache2.4.12(with event_mpm) nginx(1.7.10)
100 118.548 seconds 117.127 seconds 118.538 seconds
300 126.351 seconds 51.424 seconds 40.685 seconds
500 エラー

Completed 10000 requests
Completed 20000 requests
apr_socket_recv: Connection timed out (110)
140.633 seconds 42.298 seconds
100で画像系にアクセスしてみました 836.973 seconds

(ちょー時間かかりそうだったので、2000req行ったところで断念しました。)
33.891 seconds 8.823 seconds

個人的総評

  • CentOs6しか使ってない人はソースからインストールしたくないと思うので、
    websocketを使ったmodproxyならnginx一択かなと。
  • まずはnginxを試して、CentOS7からはapacheを考えても良いと思います。
  • nginx採用理由は機能も十分ですし、枯れていたapacheをイベント駆動型に開発していた間に、nginxのほうが新しい機能を追加するスピードが速くなってます。
    営利企業であるのも大きいかもしれませんね。
    ただやはりapacheは大きなリクエストに対しては速いという噂。
  • nginxだと数が多いリクエストが来た場合、apacheより機能が低下するという経験がある方募集。