Lapis Lazuli

technical blog for web developer

Webサーバーはnginx一択

かなりチャレンジングなタイトルですが、僕なりの結論です。
2020年現在、web系ではnginx一択になりつつあります(というかもう既になってる)
apacheを使った環境は、定番のLAMP環境で構築したい!というニーズのみで使われている感じになっています。

nginxのメリット

・1リクエスト1プロセスじゃないのでC10K問題が起きない
・メモリ使用量が(apacheに比べて)少ない
・シングルスレッドで動作し、大量のリクエストを高速にさばける
・ノンブロッキングIO
・非同期イベントドリブン
・リバースプロキシやロードバランサーとしての機能

などでしょうか。
シングルスレッドでノンブロッキングIOや非同期処理により大量にさばいていけるのが特徴になってます。
主にtoCのサービスで使われている印象ですね。ユーザー数多いと大量にアクセス来るので。
特にC10K問題を回避しているのはnginxのこのアーキテクチャのおかげだと思います。apacheは1リクエスト1プロセスなので、かならず上限が存在します。
これはもう作りの違いからよるものなのでどうしようもないです。
ただ、apacheにもメリットはあって、

・重いリクエストを処理するのが得意
・昔からあるので安定した実績がある
basic認証が簡単(私の主観)

です。
プロセスごとに独立しているので、重いリクエストを他の処理に邪魔されずに処理する事が出来るのが一番のメリットですね。(nginxは重いリクエストがプロセスを専有していまい、速度が落ちる)
ただ重い処理しないし、あってもそういうのはnginxがリバースプロキシで後ろのサーバーに投げればいい。という作りが可能なので・・・やっぱり微妙かもしれません。
枯れたミドルウェアなので安定はしています。なので業務系はwebサーバー使うとなるとapache使う事が多いです。nginxのメリットも特に活かせる訳じゃないので(急に予想できない大量の負荷がかかる訳じゃない)
basic認証は・・・私の好みですねw
htaccessとhtpassを置くだけで終わるのは楽です。まぁnginxもconfいじるだけなので、完全に好みの問題ですがw

まとめ

web系でtoCやってる会社はnginx一択でしょう。
私は以前在籍してた会社でapacheからnginxに変更した事があるのですが、明らかにメモリ使用量が減ってました。
これだけでもやった価値あったなぁと、記事を書いててじみじみ思いましたw