Nginx vs Apache: どちらのWebサーバーを選ぶか
Nginxは並行処理向けにチューニングされたイベント駆動のサーバー兼リバースプロキシ。Apacheは柔軟でモジュールが豊富な定番Webサーバーで、ディレクトリ単位の設定が可能。
Nginxは非同期のイベント駆動モデルを採用し、少ないメモリで多数の同時接続を処理できるため、リバースプロキシや静的ファイルサーバーとして人気があります。Apacheはプロセス/スレッドモデルを採用し、豊富なモジュールサポートと.htaccessによるディレクトリ単位のオーバーライドを備え、柔軟性とレガシー互換性で評価されています。Nginxは純粋な並行性を、Apacheは設定の柔軟性とモジュールの幅広さを重視します。
| Nginx | Apache | |
|---|---|---|
| モデル | イベント駆動(非同期) | プロセス/スレッド |
| 静的ファイル | 非常に高速 | 高速 |
| 設定 | 中央集約、.htaccessなし | .htaccessでディレクトリ単位 |
| リバースプロキシ | 優秀 | 良好(mod_proxy) |
| 最適な用途 | 高い並行性、プロキシ | 柔軟なモジュール、レガシー |
ユースケースとパフォーマンス
Nginxは高い並行性のもとでのリバースプロキシ、load balancer、静的サーバーとして優れています。Apacheは豊富なモジュール、動的なディレクトリ単位の設定、あるいはApacheを前提とするアプリとの互換性が必要な場面で優れています。多くのスタックはNginxを前面に置き、アプリケーションサーバーへプロキシします。
CIとdeployにおいて
どちらもcontainerにbuildされ、標準的なイメージpipelineで配布されます。deployの前にCIで設定のsmoke-test(nginx -t / apachectl configtest)を行いましょう。いずれもマネージドrunnerからクリーンにdeployでき、より高速なrunnerはイメージbuildと設定テストのステップを短縮します。
結論
高い並行性のリバースプロキシ、load balancing、静的配信ならNginx。豊富なモジュール、ディレクトリ単位の設定、レガシーアプリの互換性ならApache。よくあるパターンは、Nginxをエッジのプロキシとして置き、その背後にApache(またはアプリケーションサーバー)を配置する構成です。