<目次>
(1) ApacheとNginxの違いやそれぞれの特徴について
(1-1) Apacheとは?
(1-2) Nginxとは?
(1-3) Nginxのアーキテクチャについて
(1-4) ApacheとNginxの違い
(1) ApacheとNginxの違いやそれぞれの特徴について
(1-1) Apacheとは?
Apacheは非常に有名なOSS(ソースが公開されており拡張や再配布が可)のHTTPサーバ(インターネットを通じてコンテンツを提供するコンピュータ)で、高いシェアを誇っています(世界の約40%のウェブサイトで利用されていると言われています)。詳しくは下記の記事でまとめています。
(1-2) Nginxとは?
Nginx(発音は「エンジンX))はOSSのWebサーバです。Webサーバ機能以外にも、リバースプロキシ、HTTPキャッシュ、負荷分散、メディアストリーミングなど様々な機能を備えており、幅広い用途で使えます。「世界最速のWebサーバ」をテーマに開発されており、一般的にはApacheよりも高速とされています(後の節に比較表あり)。
(表)主要機能の概要
機能 | 概要 |
Webサーバ | インターネットにおいて、クライアントからのリクエストに基づき、Webコンテンツを提供するためのソフト・ハード(サーバ)を指します。Webコンテンツを保持し、要求されたタイミングで提供するのが役割です。 |
負荷分散 (ロードバランサー) |
処理負荷を複数のサーバや処理部品に割り振る事で、処理を効率化するための機能です。 |
リバースプロキシ | ⇒下記記事参照 https://rainbow-engine.com/whatis-proxy-setting-for-browsers/#title3 |
HTTPキャッシュ | Webコンテンツ(Webページや画像)をキャッシュと呼ばれる一時領域に保持する事で、より高速な応答を実現します。もしキャッシュに格納されているページに対するリクエストが来た場合に、キャッシュから応答する事ができ、それにより速度を向上させる事ができます。 |
(1-3) Nginxのアーキテクチャについて
Nginxのアーキテクチャの概観は以下のようになっています。
(図131)
それぞれの部品の役割は以下の通りです.
(表)
マスタープロセス | 以下のような特権操作を担当します。 ・configファイルの読み込み ・ワーカープロセスの立ち上げ ・ポートへのバインディング (ポート番号をソケット=LANのポート等に結びつける事) |
キャッシュローダープロセス | ディスクキャッシュ(ディスクIOを高速化するためのキャッシュ)をメモリにロードします。 |
キャッシュマネージャープロセス | ディスクキャッシュが設定されたサイズに収まるように調整する役割を果たします。 |
ワーカープロセス | 殆どの処理を担当する中心的なシングルスレッドのプロセスです。Apacheより優れている点として、各ワーカープロセスで数千単位のHTTPリクエストを処理する事が可能です。また「イベント駆動型」の特徴の通り、各ワーカーはイベントを待ち、発生したら非同期に処理を行います(他のイベントに影響が出ない) ・プロセス:リクエスト=1:Nの関係(1プロセスで複数リクエストを処理) ・イベントのウォッチ&処理(非同期) ・ネットワーク接続のハンドリング ・ディスクIO(コンテンツの読み書き) ・上流サーバとの通信など |
(1-4) ApacheとNginxの違い
NginxとApacheの比較をご紹介します。特筆すべきは、Nginxは「イベント駆動方式」でリクエストを処理しており、より重いトラフィック(=ネットワークを伝わるデータ量)を処理する事が可能な点です。
(表)Nginx vs Apache
比較ポイント | Apache | Nginx |
用途 | HTTPサーバー | Webサーバ リバースプロキシサーバ |
区分 | OSS | OSS |
サポート体制 (バグ対応など) |
Apacheソフトウェア財団が支援するコミュニティに所属する世界中のエンジニアにより対応。 | Nginx Incにて対応。 |
対応OS | ◎:Unix系OS ◎:Windows |
◎:Unix系OS △:Windows(限定的なサポート) |
リクエスト処理方式 | マルチスレッド方式
※選択肢が多く、リクエスト処理やウェブトラフィック(送受信データ)の処理のための、マルチプロセス処理が可能。 |
イベント駆動方式
※最小限のHWリソースで、クライアントからのリクエストを処理する方針。 |
アーキテクチャ | マルチスレッド (ただし拡張性が低い) |
非同期イベント駆動 |
同時接続 | △:処理不可
※重いトラフィック(=NWを伝うデータ量)の同時処理は不可 |
◎:処理可
※限られたハードウェアリソースでも、クライアントリクエストの同時処理が可能 |
スレッド vs 接続の対応 | △:1対1 スレッドと接続は「1対1」で対応 |
◎:1対N スレッドと接続は「1対N」で対応 |
静的ページの処理性能 | △: Nginxと比較して劣る |
◎: 静的コンテンツに対する数千の同時接続を処理可能。 |
動的ページの処理 | ○:可能 | ×:不可能 (外部プロセスによる補助が必要) |
動的なモジュールのロード | ○:可能 | ×:不可能 (コンパイルが必要) |