ひと頃の、Apacheとnginxの性能比較の時代もピークは過ぎ(だいたい2012年ごろ?)、どっちがWEBサーバとして優れているのかという二者択一的考え方自体やや古めかしい感じもしているのが現時点での一般的な感覚ではないでしょうか。
今回はそんな中、あえて改めてWEBサーバー界隈周りを整理してみたいと思います。
WEBサーバのシェア率
Netcraftの2015年4月の調査によると、nginxは、全アクティブサイトの中で2番目に多く使われている(14.24%)WEBサーバであり、W3Techsの調査によると、上位1,000サイトの41.1%、上位100,000サイトの32.9%で使われているようです。また、BuiltWithによると、上位1万Webサイトの23.8%で使われており、上位1万、10万、100万の区分において成長を続けている、という統計結果が出ています。
このことをもって、将来的にはnginxが今のApacheの座を脅かすだろう、と判断してしまうのは早計でしょう。
もちろん、MicrosoftのIISもApacheと同等の比率を占めており無視はできないのでしょうが、この記事はあくまでもオープソースのWEBサーバについて論を進めます。
WEBサーバとしてApachとnginxの目指しているところの違い
ApacheがWEBサーバとして求められる機能を満遍なく拡充させることを目指したのに対して、nginxはもともと「軽量で並列動作に向いたリバースプロキシ」として開発が進められ、通常のWEBサーバ処理に加えてロードバランサー機能を備えている点が特徴です。つまり、nginxは高負荷環境でのパフォーマンスを重視しており、大量処理、スピード重視を徹底的に追求しているところから来るのが、Apacheとの処理性能の差です。
現在の多様化するWEBサービスにおいて、上記の特徴を踏まえれば、nginxが得意とする分野のWEBサービスが多く登場してきた結果、nginxを採用する割合が増えてきたと考えれば上記の統計結果も納得がいくのではないでしょうか。
この辺のところを勘違いすると、早晩Apacheはnginxに取って代わられるという間違った推測に流れてしまうでしょう。
そもそも、サーバの能力にはメモリやCPUの影響も考慮しなくてはなりません。
また、動的なコンテンツの場合、データベースサーバのチューニングにも影響を受けるでしょう。
ですので、一概にどちらが優れていると単純に言い切れるものでもないのは、ご理解いただけるのではないでしょうか。
実際、「アパッチもいい勝負ができているという記事」(参照リンク:人間とウェブの未来 – ApacheとNginxの性能比較でevent_mpmの本気を見た)もあります。
WEBサーバの動向~Apachとnginxの連携の時代~
では、今現在ミドルウェアとしてのWEBサーバの導入を考えておられる方は、実際のところどちらを選べばよいのでしょうか。答えはこうです。
Apachとnginxのどちらか一択、という考え方ではなく、両方のいいとこ取り、つまり両方を使うという考え方です。
nginxをリバースプロキシとして使用し、静的なコンテンツはnginxに任せ、動的なコンテンツに対してはバックエンドのアプリケーションサーバ(Apache)に任せる、という方法です。
もちろん、物理的にリソースに余裕がある場合になるでしょうし、動画ストリーミングなど両者を入れ替えた方が良い場合もあるでしょう。
このように考えていくと、十分なテストを行える環境のある人は、ご自分の環境で最適解を見つけていくしかない、という身も蓋もない結論になってしまいます。
今現在、静的なWEBサイトもいわゆるWebアプリケーションフレームワーク(PHP / Java / Ruby / Python / Perl等のプログラミング言語を使用した枠組み)を活用して作成する潮流が押し寄せているように思います。
また、時を同じくして登場してきたトレンドが、レンタルサーバーやVPSと並び、料金的な面でも十分な選択肢となってきた「クラウドサービス」です。
アプリケーションの開発者だけではなく一般の個人サイト運営者にとっても、面倒なサーバの設定やチューニングに時間を費やすよりも、開発やコンテンツの充実に精力を費やす方が建設的ではないかという考え方をしてみても良いのかもしれませんね。
いわゆるミドルウェアとしてのWEBサーバの能力比較競争から現在はどのクラウド環境を選択して開発していくかが問題の主流となるのはほぼ間違いのないところでしょう。
更には、パフォーマンス的に問題があるHTTPプロトコルの改良版としてのHTTP/2も登場してきました。
まあ、HTTP/2が一般的になったらなったでまた、apacheとnginxの性能対比記事が量産されるのでしょうね(笑)
参考:HTTP/2 Japan Local Activity(HTTP/2 日本語サイト )