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

オープンソースのWebサーバ/Nginxとは

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

目次

「Nginx」基本情報
■概要
■基本説明
■動作環境
■経緯
■導入状況

主な特徴
■「Apache HTTP Server」の代替へ
■非同期イベント駆動アプローチ
■高速安定動作(C10K問題対応)
■モジュール化
■アーキテクチャ(スケーラビリティ)
・マスタプロセスとワーカープロセス

主なサーバ機能
■ネットワーク機能
・データ圧縮機能
■HTTPサーバ機能
・概要
・主なポイント
■リバースプロキシ機能
・概要
・プロキシとは
・Nginxの「キャッシュ付きリバースプロキシ機能」
・対応プロトコル
■ロードバランサー(負荷分散)機能
・ロードバランサー概要
・Nginxのロードバランシング
・負荷分散方法
・機能ポイント

補足情報
■同様製品
■オフィシャルサイト
・オフィシャルサイト
・ライセンス情報
・ダウンロード

「Nginx」基本情報

■概要

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

■基本説明

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

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

■動作環境

Nginxは以下のOSをサポートしています。
・Linux
・FreeBSD
・Solaris
・AIX
・HP-UX
・Windows
・macOS など

■経緯

・2004年 初版リリース

■導入状況

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

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

主な特徴

■「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は強力なネットワーク機能を提供します。
・10000以上の同時コネクションの処理
・コネクション数制限/帯域制限
・負荷分散(ロードバランサ)
・TLS/SSL対応---Server Name Indication、OCSP stapling
・フォールトトレラント機能
・IPv6対応
・IPアドレスベースの地理位置情報(Geolocation)に対応

データ圧縮機能

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

プロキシとは

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

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

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

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

対応プロトコル

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

サポートプロトコル
・HTTP
・HTTPS
・SMTP
・POP3
・IMAP
・FastCGI
・uWSGI
・SCGI
・memcached など

■ロードバランサー(負荷分散)機能

ロードバランサー概要

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

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

補足情報

■同様製品

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

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

■オフィシャルサイト

オフィシャルサイト

→Nginx(nginx news)

ライセンス情報

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

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

ダウンロード

→Nginx →nginx:ダウンロード

 

参考元サイト

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

Nginx最新TOPICS

【講演資料を公開】4/19「米国におけるオープンソース最新活用状況」(2017年05月19日 09:15)

2017年04月19日(水)14:30~16:30 中央区のJJK会館2階多目的ホールA にて「米国におけるオープンソース最新活用状況」と題したセミナーが開催されました。 当日は、オープンソースに関心をお持ちの方々がご来場くださり、お陰様で盛況のうちに終了することができました。皆さま熱心に公聴され、メモを執る姿も多く見受けられましたました。 また、来場者アンケートでは多くのコメントを頂戴しまし...

Nginx最新CLOSEUPコラム

無料資料プレゼント

第2回「多要素認証の種類と方法」

講演資料を見るには、 プライバシーポリシーに同意して、送付先メールアドレスをご入力しご請求ください。

またご入力いただきました情報は、当該資料の作成・提供企業とも共有させていただき、当社及び各社のサービス、製品、セミナー、イベントなどのご案内に使用させていただきます。

本資料を見るには次の画面でアンケートに回答していただく必要があります。



  • オープソース書籍(サイド)
  • OSSNEWSに広告を掲載しませんか?

facebook

twitter