Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Apache Nginx

ApacheとNginxの違いやそれぞれの特徴について

投稿日:2021年2月16日 更新日:

<目次>
(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%のウェブサイトで利用されていると言われています)。詳しくは下記の記事でまとめています。

Apacheの概要や主要機能について

目次にもどる

(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と比較して劣る
◎:
静的コンテンツに対する数千の同時接続を処理可能。
動的ページの処理 ○:可能 ×:不可能
(外部プロセスによる補助が必要)
動的なモジュールのロード ○:可能 ×:不可能
(コンパイルが必要)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Apache, Nginx

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Apacheのリバースプロキシをhttps化する手順について

<目次> (1) Apacheのリバースプロキシをhttps化する手順について  (1-0) STEP0:前提事項の確認  (1-1) STEP1:mod_sslモジュールの導入  (1-2) STE …

Apacheのリバースプロキシでセッションを維持する方法

<目次> (1) Apacheのリバースプロキシでセッションを維持する方法  (1-1) 発生状況・エラーメッセージ  (1-2) 調査  (1-3) 原因  (1-4) 対処法 (1) Apache …

Let’s Encryptの証明書の自動更新の手順(Apacheに適用した例で解説)

<目次> (1) Let’s Encryptの証明書の自動更新の手順(Apacheに適用した例で解説)  (1-1) Let’s Encriptで発行した証明書の期限について  (1-2) …

TomcatのURLに付くポート番号8080を非表示にしてドメイン名のみでサイトにアクセスする方法と手順

本記事で実現したい事は下記2点、①URLのポート番号・アプリ名を非表示(リバプロ)と②JSP/Servlet名非表示(web.xml)です。これらを実現する事でブラウザにドメイン名のみ(例:XXXX. …

Let’s Encryptの証明書をApacheに適用する手順(CentOS7を例にご紹介)

<目次> (1) Let’s Encryptの証明書をApacheに適用する手順(CentOS7を例にご紹介)  (1-0) 前提事項  (1-1) STEP1: Let’s …

  • English (United States)
  • 日本語
Top