これまで Apache と Nginx の設計思想や特徴について整理してきましたが、 最終的には「実際のところどの程度の差があるのか」を確認しておきたいところです。
特に、自分の運用しているような PHP-FPM を介した動的アプリケーション環境において、 Web サーバーを Apache から Nginx に変更することでどの程度の性能差が出るのかは気になるポイントです。
そこで今回は、Apache Bench(ab)を使って、Apache と Nginx の簡易的なベンチマークを試してみます。
(1) テストの基本コマンド
以下の例は、同時 10 リクエスト × 100 回実行の条件です。
ab -n 100 -c 10 https://(apache-server)/
ab -n 100 -c 10 https://(nginx-server)/
-n 100: 合計リクエスト数(100回アクセス)-c 10: 同時接続数(10ユーザーが同時にアクセスする想定)
(2) テストバリエーション
ざっくりとした傾向を確認するため、以下の3パターンでテストを実施します。
軽負荷(ブラウザ数人が閲覧する程度)
ab -n 100 -c 5 https://(apache-server)/
ab -n 100 -c 5 https://(nginx-server)/
中負荷(数十ユーザーが同時アクセス)
ab -n 1000 -c 20 https://(apache-server)/
ab -n 1000 -c 20 https://(nginx-server)/
高負荷(耐久テスト的な条件)
ab -n 5000 -c 50 https://(apache-server)/
ab -n 5000 -c 50 https://(nginx-server)/
(3) 評価指標
ab の出力結果から、以下の項目を比較対象とします。
-
Requests per second (mean) サーバーがどれだけ高速に応答できたかを示す指標
-
Time per request (mean) 1リクエストあたりの平均応答時間
-
Failed requests エラー発生の有無
-
Transfer rate 帯域利用効率(体感速度には直結しない)
(4) テスト実施時の注意点
- ベンチマークは対象サーバーとは別のマシンから実行します(同一サーバー上で実行すると負荷計測になりません)。
- Apache 側、Nginx 側ともに PHP-FPM を経由しているため、動的処理(DBアクセスなど)がボトルネックとなる場合、差は小さくなる可能性があります。
- 静的ファイル(例: 画像や CSS)を対象とした場合、Nginx の方が有利な結果となる傾向があります。
ベンチマーク結果(ab)
| テスト条件 | Apache | Nginx | 傾向 |
|---|---|---|---|
軽負荷-n 100 -c 5 |
10.72 req/sec466 ms/req9.3 sec | 10.66 req/sec469 ms/req9.4 sec | ほぼ同等 |
基本-n 100 -c 10 |
20.56 req/sec486 ms/req4.9 sec | 20.70 req/sec483 ms/req4.8 sec | ほぼ同等 |
中負荷-n 1000 -c 20 |
43.86 req/sec456 ms/req22.8 sec | 43.76 req/sec457 ms/req22.9 sec | ほぼ同等 |
高負荷-n 5000 -c 50 |
88.37 req/sec566 ms/req56.6 sec | 109.49 req/sec457 ms/req45.7 sec | Nginx が優位 |
まとめ
- 軽負荷~中負荷の条件では、Apache と Nginx の間に大きな差は見られませんでした。
- 高負荷(5000リクエスト / 50並列)では、Nginx の方が約25%多くのリクエストを処理できる結果となりました(109 vs 88 req/sec)。
- PHP-FPM やデータベースアクセスなどのアプリケーション層が共通であるため大きな差は出にくいものの、高並列時の効率性という点では Nginx の優位性が確認できました。