WEBサーバを利用する上でApacheとNginxはどちらが良いの?
私もその一人で、今までは問答無用でApacheの利用でした。
自分が提案する構成もApacheでした。
でも、Nginxにもメリットがあるわけで、ここ最近急激に利用率が増えてきています。
少しまとめてみましたので、少しでも参考になればと思います。
もくじ
結論 Nginxの利用は高まる
これからは『Nginxが主流となる』です。
簡易的なWEBサービスであればどちらでも良く、おもーい処理まで実施したいのであればApacheの利用になるのかと思いました。
ただし、あまりに大量のアクセスが来る場合に、マルチプロセスであると限界値が早いので処理しきれなくなります。
下記にもう少し詳しく説明していきます。
今までは Apache が主
今まで利用してきたWEBサービスと言うと、何といってもApacheが主流でした。
どの会社に行っても、WEBサービスの利用はほぼほぼApacheと言うのが今までの流れで、私も、Apacheの設定ポイントは、それなりに覚えたものです。
しかし、やはり時代の流れと言うか、新興勢力現れるものですが、Nginxが急激に伸びて来ていますね。
という事で、自分の理解の為にも少し調べてみました。
実際の利用状況確認
以下、参考です。
よく使われているWEBサービスはどのようなものか、利用率はどのくらいかを記しています。
参考元:https://w3techs.com/technologies/history_overview/web_server/ms/q
このように利用されていると言う参考図になります。
Nginx がこの先、追い付くような伸びですね。
主要WEBサービスについて (ApacheとNginx)
ここで言う主要WEBサービスは、ApacheとNginx です。
Apacheとは
1995年より利用されだしたWEBサーバです。
WEBサーバを構成するソフトウェアです。
世界で、一番利用されているWEBサーバです。
オープンソースであり、無料で利用できます。
ナレッジも蓄積され、設定も項目はある程度限られてはくるので比較的構築しやすい。
多彩なモジュールが用意されている。
Nginxとは
こちらもWEBサーバを構成するソフトウェアです。
多彩なモジュールが用意されている。
並行処理とメモリ消費抑制を重視した設計。
同時アクセスが増えても安定。
負荷分散、プロキシ機能(メール)としても利用できる。
見やすく、簡単に一覧にしてみました。
Apache | Nginx | |
公開年 | 1995年 | 2004年 |
アーキテクチャ | 1プロセス1リクエスト マルチプロセス プロセス数が増えていき、メモリ使用量も多い |
1プロセス複数リクエスト シングルスレッド 並列化、メモリ消費抑制、同時アクセス イベント駆動型、非同期処理 |
得意分野 | 動的コンテンツ | 静的コンテンツやProxyとしての利用 |
メリット | 拡張が簡単 信頼性がある ナレッジが豊富 |
分散処理に優れている 元々の機能が豊富 カスタマイズ可能 |
デメリット | メモリ消費量が多い 同時処理が多いと1台では厳しい |
大量なトランザクション処理などが発生するなら不向き 動的になるには、本機能のみでは厳しくなる 設定がイベント毎に設定を記載する必要が有る為複雑 |
実際に環境を利用する
docker でNginxを利用してみることにします。
docker run --name NginxTEST -d -p 8081:80 nginx
現時点で、自宅サーバには複数のWEBサービスが動いているので、今回は8081ポートを使うことにしました。
※Dockerイメージの操作は下記コマンドにて
docker exec -it NginxTEST /bin/bash
設定については、結構細かいです。
各イベント毎に設定をいれていくので複雑化はします。
個人的見解
現時点では、まだApacheの利用数の方が多いようです。
どちらを利用するべきか、と言うところですが、これは、利用用途に応じて使い分けると言うのが正解でしょうね。
高機能なWEBサービスを利用する必要があるならApacheとなると思います。
静的コンテンツのみの軽めな仕上がりでの利用であればNginxの方が良さそうですが、そもそも軽いサービスであればApacheでも十分使えるわけなので、そうなるとどちらでも良さそうです。
Nginxを利用する場合は、Proxy機能(メールなど)での利用や負荷分散したいと言った場合に利用することはありそうですね。
ただ、その場合、対比するのはApacheだけでなく、Squidであったり、ロードバランサーであったりします。
高額なロードバランサーの代わりにNginxを構築すると言うのはあるかもしれないですが、機能で見るならば、普通にロードバランサーを使えとなる気がします。
なので、そもそも、比べる用途が違うような気もしたのですが、Nginxがここまで利用が広がっているのには理由があると思います。
それは、この先、PCやスマートフォン以外にもインターネットに接続できるモノが世の中に広がっていきます。
IoT機器と呼ばれる機器は、今後ますます増えていきます。
ウェアラブルなどもそうですし、テレビやBluerayなどの機器もインターネットへ接続され、今まで以上のアクセスは極度に増えることは必至です。
Apache は非常にWEBサービスとしては優れてはいるのですが、スケールアウトしながら運用するのも限界がありそうですね。
負荷分散を得意とするNginxが自分で処理できるものは、そのまま自分で処理をし、重たい処理はその配下にApacheを配置し、そちらに送ってしまうというような使い方になりそうです。
まとめ
まとめに入ると、個人的には、『利用用途に応じて使い分けるべきだが、Nginxは今後の主流』となります。
機能としては、Apacheの方がやはり優れていると思えたのですが、いかがでしょう。
基本的に、Apache複数で利用し、負荷が高まるならば必要に応じてスケールアウトするのが王道と思っていますが、単なる静的コンテンツの利用にとどまらないのが昨今の流れだとすると、やはりまだまだApacheの利用になるのかなと思いました。
Proxyや負荷分散としても、企業ではロードバランサーなどの利用をする方が一般的ですが、その部分をサーバに代替するのは、小規模な会社や個人レベルでの利用になるのかなと思いました。
でもそれは、現時点までの使われ方で、今後は1人が複数のデバイスを持つだろうし、IoTの普及で更にアクセスも増えるだろうという背景を考えると、従来のApacheのアーキテクチャでは対応が難しくなっていくということになると思います。
私の調べた感じ、必要に迫られて変わっていくことになってしまっている状況です。