技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

ApacheとNginx

Apache

  • リクエストごとにプロセスを起動して処理するため、メモリの消費量がかさ張る
  • メモリ空間が独立しているため、PHPなどのスクリプト言語を組み込みやすい
  • CPUリソースを多く消費するような動的コンテンツの処理でも速い


Nginx

  • キューに溜まったリクエストをシングルスレッドでループ処理するため、プロセスが増えずメモリの消費量が少ない。大量の処理を捌く事に適性がある
  • 設定ファイルが直感的で、設定しやすい
  • 1つのメモリ空間で動作するため、スクリプト言語を組み込めない事がある
  • 静的ファイルの処理が速い
  • 動的コンテンツの処理はあまり速くない


どちらを利用するか

同時接続に強いという点から、Nginxが好まれる傾向があるようです。
特にメディアなど、同じコンテンツを見せるキャッシュ効果の高いサービスにはメリットが特に高いと考えられます。

近年、スマートフォンの登場により、同時接続が大量に発生するケースが増えました。
Webサーバ、つまりクライアントからの要求を処理する最初の部分が、
処理を捌くのに時間をかけていたら、顧客体験に悪影響を及ぼします。
SEOの観点からも、静的コンテンツを素早く表示する事が求められています。

ApacheとNginxの共存

とはいえ、リソースを多く消費する動的コンテンツの場合や、スクリプト言語を組み込みたい場合にはApacheが有利になってきます。

そこで、WebサーバをApacheとし、クライアントとWebサーバの間に
リバースプロキシサーバとしてNginxを配置する方法があります。

クライアントからのリクエスト処理と静的コンテンツの返却はNginxに任せ、
動的コンテンツの処理をApacheに任せるという格好です。
リバースプロキシサーバは複数のWebサーバに通信することもできます。
各サーバの負荷を軽減できるほか、クライアントからWebサーバを隠蔽する事ができるので、セキュリティ面も向上します。

ただし、リバースプロキシを配置する分、メンテナンスや監視などインフラ面での管理コストがかさみます。
また、リバースプロキシによる通信でリソースが消費されてしまう点にも一定の注意が必要です。

参考

hayatan.hatenablog.com

neinvalli.hatenablog.com