マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】Nginx

【OSS情報アーカイブ】Nginx

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

「Nginx」とは

「Nginx」基本情報

■概要

Nginx(エンジンエックス)とは、処理性能/並行処理/メモリ使用量削減にフォーカスして開発されているWebサーバ/リバースプロキシです。ロードバランサーやHTTPキャッシュのなどの機能も備えています。

■基本説明

Nginxは、「HTTPサーバ」「リバースプロキシサーバ」「メールプロキシサーバ」「汎用TCP / UDPプロキシサーバ」などの機能を持ちます。

Nginxは、HTTP接続とトラフィックを管理するための主要なWebアクセラレーション手法をすべて可能にしています。「静的コンテンツ高速配信」「能力負荷分散」「SSLターミネーション」「接続要求ポリシング」「静的コンテンツのオフロード」「コンテンツキャッシング」などの機能により、高性能かつスケーラブルであり、安全で信頼性の高い各種サーバ機能を提供します。

■経緯

・2004年:初版リリース

■ユースケース

Nginxは、当初ロシアのサイトを中心として導入され、高い処理能力などの理由により急速にシェアを拡大しており、1日に数億リクエストを処理するような大規模サイトを中心に導入されています。

2018年のDockerの使用状況に関する調査によると、NginxはDockerコンテナで最も一般的に導入された技術になっています。

■オフィシャルサイト情報

オフィシャルサイト

→Nginx(nginx.org)

ライセンス情報

Nginxのライセンスは「BSDライクライセンス」です。

詳細について、こちらを参照ください。
→Nginx →LICENSE

動作環境

Nginxは以下のOSをサポートしています。

・Linux
・FreeBSD
・Solaris
・AIX
・HP-UX
・Windows
・macOS など

ダウンロード

→Nginx →nginx: download

■同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「Apache HTTP Server」など。

「Nginx」の主な特徴

■「Apache HTTP Server」の代替へ

Nginxは、高機能性や設定容易性などにより「Apache HTTP Server」を代替できるWebサーバとして注目されています。

Nginxは「Apache HTTP Serverより優れたパフォーマンスを達成する」という明確な目標を立てて開発されました。

静的コンテンツ(HTMLドキュメントや画像ファイルなど)を高速で配信する能力は、「Apache HTTP Server」より優れています。Apacheよりもメモリを大幅に節約し、毎秒約4倍のリクエストを処理できます。

Nginxは、アクセス数が多いサイトで急激にシェアを拡大していて、上位1000トップシェアのカテゴリでは、Apacheを上回ってきているというデータもあります。

■非同期イベント駆動アプローチ

Apache HTTP Serverは、リクエスト処理にデフォルトで「スレッド/プロセス指向アプローチ」を用いています。

一方で、Nginxは、リクエストを処理するためにスレッドではなく、「非同期イベント駆動アプローチ」を採用しています。Nginxのモジュール式イベントドリブンアーキテクチャは、特に高負荷下において、より予測可能なパフォーマンスを提供します。

■高速安定動作(C10K問題対応)

また、Nginxは、「C10K問題」を解決するために開発されました。「C」は「Client(クライアント)」、「10K」は「1万台」を意味します。ハードウェアやネットワーク性能に問題がなくても、同時クライアント接続数がある一定数を超えるとサーバの処理能力が急激に減少してしまうという問題です。

Apache HTTP Serverは、1つのリクエストを処理するごとにリソースを消費していく仕組みです。

一方、Nginxは、非同期イベント駆動アーキテクチャを採用して対応しています。並列処理を重視した設計で、同時アクセス数が増えても安定的に動作できます。そのため、Nginx開発者によると「同時接続数がApacheの10~100倍に増加」としています。

■モジュール化

Nginxの多くの機能はモジュール化されているため、柔軟に機能構成変更を行えます。

・不要な機能を外して軽量化
・公開されているモジュールを取り込んで機能強化
・独自機能を実装したモジュールを開発して追加 など

■アーキテクチャ(スケーラビリティ)

Nginxには「1つのマスタプロセス」と「複数のワーカープロセス」があります。

このようなアーキテクチャにより、柔軟な設定が可能で、クライアントサービスを中断することなく実行可能ファイルの再構成とアップグレードを行えます。

マスタープロセス

マスタープロセスは「構成ファイルを読み込んで評価」「ワーカープロセスの維持」を行います。

ワーカープロセス

ワーカープロセスは「要求に対する実際の処理」を行います。

Nginxは、イベントベースモデルとOSメカニズムに対応して、ワーカープロセス間で効率的に要求を分散します。

ワーカープロセスの数は設定ファイル(nginx.conf)のディレクティブによって定義され、「固定数に設定」もしくは「使用可能なCPUコア数に自動的に調整」を設定できます。

「Nginx」のネットワーク機能

「Nginx」のネットワーク機能

■主なネットワーク機能

Nginxは強力なネットワーク機能を提供します。

・10000以上の同時コネクションの処理
・コネクション数制限/帯域制限
・負荷分散(ロードバランサ)
・TLS/SSL対応—Server Name Indication、OCSP stapling
・フォールトトレラント機能
・IPv6対応
・IPアドレスベースの地理位置情報(Geolocation)に対応

■送信時データ圧縮機能

Nginxはクライアントに応答を送信する前にデータ圧縮を実行できます。レスポンスを圧縮すると、送信されるデータサイズを大幅に縮小できる場合があります。

ただし、データ圧縮処理はデータ送信実行時に発生するため、オーバーヘッドが加わりパフォーマンスに悪影響が出る可能性があります。

プロキシされたサーバなどから発生する「すでに圧縮されているデータ」に対してはデータ圧縮を行いません。

「Nginx」のHTTPサーバ機能

「Nginx」のHTTPサーバ機能

■概要

NginxをWebサーバとして構成することは「対象URL」と「対象URLのリソースに対するHTTP要求」をどのように処理するかについて定義することを意味します。

下位レベルでは、特定のドメインまたはIPアドレスに対する要求の処理を制御する一連の仮想サーバを定義します。

HTTPトラフィックの各仮想サーバは、特定のURIセットの処理を制御するロケーションと呼ばれる特別な構成インスタンスを定義します。各ロケーションは、このロケーションにマップされているリクエストに何が起こるかという独自のシナリオを定義します。
・要求をプロキシ
・対象ファイル送信
・URIを変更—要求を別ロケーションまたは仮想サーバにリダイレクト
・特定のエラーコードを返す(エラーページ表示) など

■主なポイント

機能

・静的ファイル提供
・インデックスファイル提供
・自動索引付け
・オープンファイル記述子キャッシュ
・モジュラアーキテクチャフィルタ—gzipping、チャンクレスポンス、XSLT、SSI、イメージ変換フィルタ
・データ圧縮機能—gzip圧縮/展開/事前gzip圧縮
・URLリライト機能
・ストリーミング機能—FLV、MP4
・Webページアクセス認証機能
・ログ機能—カスタマイズ可能
・仮想サーバ機能—名前/IPアドレスベース
・Server Side Includesサポート

プロトコル

・HTTP/2サポート—加重および依存関係に基づく優先順位付け
・WebSocket および HTTP/1.1 Upgradeヘッダサポート
・SSL/TLS SNIサポート
・SPDYサポート
・WebDAVサポート
・XSLTサポート

「Nginx」のリバースプロキシ機能

「Nginx」のリバースプロキシ機能

■概要

Nginxが注目される理由の1つとして「リバースプロキシとして動作できる」という点が挙げられます。

■プロキシとは

プロキシとは、一般的に、「複数サーバ間で負荷を分散」「異なるWebサイトのコンテンツをシームレスに表示」「HTTP以外のプロトコルを使用してアプリケーションサーバに処理要求を渡す」などの用途として使用されます。

■Nginxの「キャッシュ付きリバースプロキシ機能」

Nginxのキャッシュ付きのリバースプロキシ機能は以下の流れで処理を行います。
1.プロキシサーバに送信するクライアント要求ヘッダーを変更
2.Nginxから指定されたプロキシサーバにリクエストを送信
3.プロキシサーバからの応答のバッファリングを構成

この機能により、メインサーバの代理としてコンテンツの送信を行い負荷を分散できます。「APサーバについて、アプリケーションを実行するという本来の役割に専念できるようにする」という思想で設計されています。

■対応プロトコル

Nginxは、特定のプロトコルを使用して、HTTPサーバやアプリケーションサーバにプロキシできます。

サポートプロトコル

・HTTP
・HTTPS
・SMTP
・POP3
・IMAP
・FastCGI
・uWSGI
・SCGI
・memcached など

「Nginx」のロードバランサー(負荷分散)機能

「Nginx」のロードバランサー(負荷分散)機能

■ロードバランサー概要

複数アプリケーションインスタンスにわたる負荷分散は「リソース使用率最適化」「スループット最大化」「遅延短縮」「フォールトトレランス構成保証」などを目的としてよく利用されます。

■Nginxのロードバランシング

Nginxは、バックエンドにアプリケーションサーバを複数台配置して、ロードバランサーとして機能できます。

「FastCGI」「スクリプト用SCGIハンドラ」「WSGIアプリケーションサーバ」「Phusion Passenger」などのモジュールを使用して、ネットワーク上の動的HTTPコンテンツを提供するために配備でき、ソフトウェアロードバランサーとして動作します。

Nginxを効率的なロードバランサとして使用することで、「複数アプリケーションサーバにトラフィックを分散」「Webアプリケーションのパフォーマンス/スケーラビリティ/信頼性向上」などのメリットを得られます。

■負荷分散方法

Nginxでは、次の負荷分散メカニズムをサポートしています。

・ラウンドロビン方式
・最小接続数—アクティブ接続数が最小のサーバに次の要求を割り当てる
・IPハッシュ—クライアントのIPアドレスに基づいてハッシュ関数を使用

■その他の主なポイント

・プロトコルのバランシング—HTTP、HTTPS、TCP、UDP、SMTP、IMAP、POP3
・キャッシュによる逆プロキシの高速化—FastCGI、uwsgi、SCGI、memcached
・負荷分散とフォールトトレランス
・単一ページ内の複数SSIインクルージョン—プロキシ、FastCGI/uwsgi/SCGI

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

この記事のタグ一覧

おすすめの記事

【AIツール実験室】チャットAI対抗「添削能力」選手権🏆

AIツール実験室

2023.12.27

【AIツール実験室】チャットAI対抗「添削能力」選手権🏆

各チャットAIの「添削能力」について比較確認をしています。 「ChatGPT4と同等の添削能力を発揮した無料チャットAI」にご注目ください。 また、 ChatGPTカスタマイズ機能「GPTs」を利用して作成した GPTs文章添削機能「添削師匠さん✍️」を紹介しています。 課金勢は試しに使ってみてください。

【IT用語解説】「 デジタルヒューマン 」とは😊

IT用語解説

2024.01.26

【IT用語解説】「 デジタルヒューマン 」とは😊

【IT用語解説】「 デジタルヒューマン 」として、「デジタルヒューマンとは何か?」「どのようにして作成できるのか?」「私たちの世界にどのような影響を与えているのか?」などについて、まとめています。

AIツール関連 記事リストポータル

AIツール

2023.10.05

AIツール関連 記事リストポータル

AI 関連の記事をまとめたポータルページです。