【初学者向け】Nginxって?


はじめに

未経験からWeb系エンジニア職へ転職活動を行っています。企業との面談中に出てきたNginxというワードに聞き馴染みがなく震えたので今回まとめました。筆者は違いを意識せずApacheを使っていたのであまり馴染みがなかったようです。。

Nginxとは

Webサーバーの一種。Webサイトを公開する時に様々なサーバーが動いているが、その中心になるのがWebサーバーである。Webサーバー用のソフトウェアには、種類と得意分野がある。以前まではApacheが有名で多く利用されていたが、近年ではNginxも注目されており、2020年8月時点のWebサーバーのシェアは第1位Nginx(36.45%)、第2位Apache(25.87%)となっていて、目覚ましい成長がある。
参考:https://news.netcraft.com/archives/2020/08/26/august-2020-web-server-survey.html

ミドルウェア:
コンピュータを制御するオペレーションシステム(OS)と、特定の処理を行うアプリケーションソフトウェアとの間に存在するソフトウェアのこと。

Webサーバーソフトウェア:
ミドルウェアの一つ。HTTPリクエストを送った後に、何かしらのレスポンスを返すプログラム。

NginxとApacheの比較

Nginx(エンジンエックス)

  • オープンソースソフトウェア(OSS)
  • Apachと比較して、Nginxは高速かつ高負荷に強い
  • C10K問題をはじめ、大容量のデータ配信や大量同時接続に耐えることを目的に設計された。
  • ノンブロッキングI/Oと非同期のイベント駆動アーキテクチャを採用することで、Apacheと比較して同時接続数が10〜100倍くらいになる。→Nginxはworkerと呼ばれるシングルスレッドのプロセスを複数利用している

Apache(アパッチ)

  • 正式名称は「Apache HTTP Server」
  • オープンソースソフトウェア(OSS)
  • マルチプロセスモデル(接続毎にプロセスをフォーク)のため、メモリがいっぱいになりやすい  →リクエストを処理するごとにリソースが枯渇してしまう
  • CMS(Contents Management System)を利用する際に、比較的簡単な設定で済む
  • 約20年間OSSとして公開され、バージョンアップした結果、信頼性が高い

・オープンソース:
WordPressのようにプログラミングを無料で利用でき、自由にカスタマイズができる。

・C10K問題:
Apache HTTP ServerなどのWebサーバソフトウェアとクライアントの通信において、クライアントが約1万台に達すると、Webサーバーのハードウェア性能に余裕があるにも関わらず、レスポンス性能が大きく下がる問題
参考:https://qiita.com/katu_/items/01c9c35d17a541014d32

・イベント駆動型アーキテクチャ:
変化に適応できてリアルタイムで意思決定できる、柔軟なシステムを組織が達成できるよう支援します。リアルタイムで状況を把握できるので、システムの現状を表すすべての利用可能なデータを使用して、手動または自動でビジネス上の意思決定を下せます。
参考:https://www.redhat.com/ja/topics/integration/what-is-event-driven-architecture
・シングルスレッド
コンピュータのプログラムは、基本的に1行ずつコードが実行されながら動作する。通常、分岐やループがあっても、プログラム全体は1つの流れになっている。このような一連のプログラムの流れを「スレッド(糸)」と呼ぶ。1つのスレッドだけからなるプログラムを「シングルスレッドなプログラム」という。一方、処理効率を上げるなどの目的で1つのプログラムで複数のスレッドを同時に実行することができる。これを「マルチスレッド・プログラム」という。
参考:https://www.atmarkit.co.jp/ait/articles/0503/12/news025.html

Nginxが向いている分野

  • 一般向けのWebサービスなど多数の同時アクセスが発生する業務
  • 静的コンテンツが多いWebサービスなど

静的コンテンツ:
静的コンテンツは、index.html などのように、要求のパスに指定されたhtmlなどのデータがそのまま応答のデータとして送信される方式のWebページのことです。誰が見る場合でも常に同じ内容を提供する場合に使われます。
参考:静的コンテンツと動的コンテンツ
http://juen-cs.dl.juen.ac.jp/html/www/005/

NginxとApacheの使い分け

Nginxの場合

  • 負荷が高く、スケーラビリティが要求される
  • 静的ページに同時多数のアクセスが想定される

Apacheの場合

  • 負荷が低く、早期または簡単なセットアップが必要
  • 同時アクセス数が小さく、リクエスト数が多い

参考:
https://www.out48.com/archives/1576/
https://qiita.com/kamihork/items/49e2a363da7d840a4149

おわりに

Nginxを実際に触ったことがないため、あまり深くまでApacheとの比較はできませんでした。
今後の学習で、この記事に深みを出していきます。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)