シェア
//Nginxのアーキテクチャ、動作、および基本設定

Nginxのアーキテクチャ、動作、および基本設定

Nginx(Engine X)は、Igor Sysoevによって2004年に開発されたオープンソースのHTTPウェブサーバーで、C10k問題(10,000の同時接続を処理する問題)を解決するために作られました。現在、Nginxは単なるウェブサーバーではなく、強力なリバースプロキシロードバランサーHTTPキャッシュとしても利用されています。

1. Nginxの概要

  • Nginxは、HTTPウェブサーバー、リバースプロキシ、ロードバランサー、コンテンツキャッシュ、TCP/UDPプロキシサーバー、メールプロキシサーバーです。
  • 柔軟性、優れたパフォーマンス、安定性、リソース消費の低さ、シンプルな設定が特徴です。
  • イベント駆動型とノンブロッキングI/Oのメカニズムにより、同時に何千もの接続を効率的に処理します。

2. Nginxアーキテクチャの主要コンポーネント

Tìm hiểu về Nginx

Nginxアーキテクチャの主要コンポーネント

Masterプロセス:

  • Nginxのライフサイクル全体を管理します。
  • 設定ファイル(nginx.conf)を読み取り、検証します。
  • ワーカープロセスを作成し、起動します。
  • システムからのシグナル(再起動、リロード、停止など)を処理します。
  • クライアントからのリクエストは直接処理しません。

ワーカープロセス:

  • クライアントからのリクエストを処理し、静的コンテンツを提供するか、バックエンドにリクエストを転送します。
  • 独立して動作し、イベント駆動型で複数の接続を同時に処理します。
  • worker_processesの数は、通常CPUコアの数と一致させてリソースを最大限に活用します。

キャッシュローダープロセス(オプション):

  • 再起動時にディスクからメモリにキャッシュコンテンツをロードします。

キャッシュマネージャープロセス(オプション):

  • キャッシュのサイズ管理と定期的なクリーンアップを行います。

3. ワーカープロセスの動作

ワーカープロセスはイベント駆動型モデルに従い、epoll(Linux)などのメカニズムを使用して、単一のスレッドで複数の接続を同時に処理します。

A. 初期化とイベント待機

初期化:Masterプロセスによって作成された後、ワーカープロセスはNginxの設定ファイルから情報を読み取り、イベントループを設定して新しい接続、I/Oリクエスト、または処理が必要なタスクを監視します。

イベント待機:ワーカープロセスは、(新しい接続、データの受信、データの書き込み完了など)監視すべきイベントをepollメカニズムを使ってシステムに登録します。

B. 接続の処理

epollからのイベント受信:新しいリクエストがクライアントから送信されると、epollはワーカープロセスに通知し、ワーカープロセスはそのイベントを即座に処理します。

接続はブロックしない:ワーカープロセスは、データまたはリソースを待っているときにブロックしません。もしデータがまだ準備できていない場合(例:リクエストのボディが完全に読み込まれていない場合)、ワーカープロセスは一時停止し、他の接続を処理します。

並列処理:各ワーカープロセスは1つのスレッドで実行されますが、イベントループ内でイベントを切り替えながら、何千もの接続を同時に処理することができます。

C. リクエストの処理

リクエスト解析:HTTPリクエストの解析(ヘッダー、メソッド、URLなど)を行い、設定ファイルに基づいて適切な処理を実行します。

タスクの実行:静的コンテンツの提供、バックエンドサーバーへのリクエストプロキシ、またはSSL/TLSの処理を行います。

D. レスポンスの送信

レスポンスの準備:HTTPレスポンスを作成し、ステータスコード、ヘッダー、ボディを設定します。

レスポンスの送信:データをソケット経由で書き込むか、データが大きい場合はチャンク化して送信します。

E. 接続の終了または保持

処理が完了した後、ワーカープロセスは次のリクエストがない場合接続を閉じるか、HTTP keep-aliveが有効であれば接続を保持します。

4. ワーカープロセスの設定

A. ワーカープロセスの設定

設定ファイル:/etc/nginx/nginx.conf(通常、このファイルは/usr/local/nginx/conf/etc/nginx、または/usr/local/etc/nginxにあります)。

worker_processesディレクティブを使って設定(デフォルトはauto = CPUコア数)。

例:

worker_processes auto;

B. ワーカー接続数

各ワーカープロセスは複数の接続を同時に処理できます。

最大同時接続数はworker_connectionsディレクティブで設定します。

例:

worker_connections 1024;

最大接続数の計算式:
最大接続数 = worker_processes × worker_connections

例:

  • worker_processes 4;
  • worker_connections 1024;
  • 最大接続数 = 4 × 1024 = 4096接続。

C. epollの使用(Linux特有)

Linuxシステムでは、イベント処理のパフォーマンスを最適化するためにepollメカニズムを有効にすることをお勧めします。

例:

use epoll;

D. CPUアフィニティ

各ワーカープロセスが特定のCPUコアを使用するように指定して、コンテキストスイッチのコストを削減します。

例:

worker_cpu_affinity auto;

5. 結論

Nginxは、イベント駆動型アーキテクチャと優れた同時接続処理能力を持ち、以下に適しています:

  • ウェブサーバー(静的コンテンツ)。
  • リバースプロキシサーバー。
  • ロードバランサーとキャッシュ管理。
  • マイクロサービスアーキテクチャのゲートウェイ。

Nginxのアーキテクチャを理解し、設定を最適化することで、パフォーマンスを向上させ、リソースを削減し、大規模なウェブアプリケーションにおけるシステムの安定性を確保できます。

アドバイス: Nginxを使用している場合、パフォーマンスの監視とチューニングは重要です。Nginx Amplifyや、Prometheus + Grafanaなどのツールが役立ちます。

参考文献:

Nguyễn Thị Mỹ Phương
Developer

今すぐ応募







    福利厚生

    給料・ボーナス制度

    社員の感情・願望を理解しているので、リバークレーンベトナムは特に年2回の定期昇給制度を設けています。毎年6月と12月に評価を行い、毎年1月と7月に給与が変更されます。また、社員は月次と年次の優秀な個人には定期的な業績賞与が別で支給されます。

    日本研修制度

    世界中の新しい技術分野に触れるために、社員を日本にオンサイトさせる方針があります。さらに、技術分野か管理分野かのキャリアパスは社員の決定次第です。

    毎年社員旅行

    リバークレイン・ベトナムは、スタッフに挑戦の機会を提供するだけでなく、年に一度の魅力的な旅行で彼らを楽しませています。エキサイティングなガラディナーやチームビルディングゲームは、リバークレインのメンバー同士の絆をさらに深める手助けをします。

    リバークレイン イベント

    チームビルディング・ファミリーデー・お夏休み・中秋節などのイベントはチーム内のメンバーが接続出来るしお互いに自分のことを共有出来る機会です。ご家族員に連携する際にはそれも誇りに言われています。

    社会保険制度

    リバークレーンベトナムは従業員に社会保険、医療保険、失業手当などの社会保険制度があります。当社は、これらの保険に関するあらゆる手続きをスタッフに必ずサポートしています。さらに、他の保険契約も考慮され、検討されています。

    他福利

    社員向けの活動をサポートすることもあります。 ・文化・芸術・スポーツクラブの運営費用 ・技術研究の教科書を購入する金額 ・エンジニア試験・言語能力試験を受験料 ・ソフトスキルのセミナー・コースの参加費 ・等 また会社政策通り、他のベネフィットもあります。

    © 2012 RiverCrane Vietnam. All rights reserved.

    Close