Apache
- リクエストごとにプロセスを起動して処理するため、メモリの消費量がかさ張る
- メモリ空間が独立しているため、PHPなどのスクリプト言語を組み込みやすい
- CPUリソースを多く消費するような動的コンテンツの処理でも速い
Nginx
- キューに溜まったリクエストをシングルスレッドでループ処理するため、プロセスが増えずメモリの消費量が少ない。大量の処理を捌く事に適性がある
- 設定ファイルが直感的で、設定しやすい
- 1つのメモリ空間で動作するため、スクリプト言語を組み込めない事がある
- 静的ファイルの処理が速い
- 動的コンテンツの処理はあまり速くない
どちらを利用するか
同時接続に強いという点から、Nginxが好まれる傾向があるようです。
特にメディアなど、同じコンテンツを見せるキャッシュ効果の高いサービスにはメリットが特に高いと考えられます。
近年、スマートフォンの登場により、同時接続が大量に発生するケースが増えました。
Webサーバ、つまりクライアントからの要求を処理する最初の部分が、
処理を捌くのに時間をかけていたら、顧客体験に悪影響を及ぼします。
SEOの観点からも、静的コンテンツを素早く表示する事が求められています。
ApacheとNginxの共存
とはいえ、リソースを多く消費する動的コンテンツの場合や、スクリプト言語を組み込みたい場合にはApacheが有利になってきます。
そこで、WebサーバをApacheとし、クライアントとWebサーバの間に
リバースプロキシサーバとしてNginxを配置する方法があります。
クライアントからのリクエスト処理と静的コンテンツの返却はNginxに任せ、
動的コンテンツの処理をApacheに任せるという格好です。
リバースプロキシサーバは複数のWebサーバに通信することもできます。
各サーバの負荷を軽減できるほか、クライアントからWebサーバを隠蔽する事ができるので、セキュリティ面も向上します。
ただし、リバースプロキシを配置する分、メンテナンスや監視などインフラ面での管理コストがかさみます。
また、リバースプロキシによる通信でリソースが消費されてしまう点にも一定の注意が必要です。
参考