Help us understand the problem. What is going on with this article?

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

More than 5 years have 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より機能が低下するという経験がある方募集。
sion_cojp
元プロゲーマーのインフラエンジニアです。 好きなことは音楽、ギター、食べ歩き、GetWild。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away