ApacheとNginxの違い

Share on:

今の職場ではApacheを使っているんだが、最近はNginx一択なのではないかと言われている。
かつてはWEBサーバといえばApache一択だったが、Nginxという新しいWEBサーバが出てきたがために、Apacheに地位は追いやられてしまったようだ。
ただ、どのサイトがApacheまたはNginxを使っているかはユーザからではわからない。
明らかにレスポンスが早いという違いも見られないのだが、実際にどのような違いがあるのかを調べてみた。

Apacheとは

まず違いを明確に分けるには、プロセスモデルの特徴を知るべきである。
Apacheはマルチプロセスモデルである。
マルチプロセスモデルとは、1接続ごとにプロセスを使う。つまりプロセスが多くなるほど重くなるという欠点がある。
特に大きなサイトを扱う際にはこのデメリットが顕著に現れるだろう。
メリットとしては、設定が簡単であり、長年培ってきた知識から、情報量が多いということくらいである。
もちろん扱うことができる技術者の数も多い。
しかしこのメリットは時間とともに差を縮められるものだから、Apacheが有利になる部分があまりない気がする。

Nginxとは

Nginxはシングルスレッドである。
1つのスレッドでプロセスを処理するイメージだ。
1つじゃ足りないじゃないかと思うかもしれないが、1つのスレッドで順番に処理していくから高負荷に耐えることができる。
順番待ちしている分遅くなるかというと、そうでもなくてむしろApacheより早いのである。
この具体的な理由はまだ勉強中だが、非同期で処理しているから裏ではプロセスを処理しているが、終わったプロセスからどんどん返していくということだろう。
Nginxはリバースプロキシとしての機能も持っていることから、負荷分散にも対応するという優れものである。
Apacheより負荷に耐えつつ、さらに分散までできるとなるとApacheに勝ち目はない気がする。

Nginxに軍配が上がる

Nginxは最近、利用者急増している、というより新規でサービスを作る際はほぼNginxを選定している気がする。
Apacheを利用しているサービスは簡単には変更できない大手のレガシーなサービスだけになってくるのではないだろうか。
とはいえ、この大手企業のニーズがまだまだあるので、すぐにApacheに取って代わられるというわけでもないかもしれない。
ただ、もし今からWEBサーバを学びたいということであれば、Nginxをおすすめするし、Apacheを使っている会社はレガシーであると決めて、他の会社を検討してもいいレベルである。