NGINX, Inc.は、アプリケーションデリバリープラットフォームの最新リリースであるNGINX Plus Release 7(R7)の提供開始を発表いたします。今回のアップデートでは、新しいWeb標準HTTP/2を完全にサポートする実装を、主要Webサーバーとして初めて提供します。NGINX Plusは、新規および既存のWebサービス向けのフロントエンドHTTP/2ゲートウェイ兼アクセラレーターとして導入できます。
[編集者注 – この投稿は、初版で言及していた独立したステータスモジュールを置き換え、非推奨とするNGINX Plus APIを参照するよう更新されています。]
最新のアップデートでは、エンタープライズアプリケーションに求められるパフォーマンス、セキュリティ、信頼性を確保しながら、組織がアプリケーションを提供できるよう、大幅な改善と機能の追加も行われています。これには、アプリケーションの監視、管理、デバッグを容易にする大幅な機能強化に加え、セキュリティとパフォーマンスを最適化する機能の追加が含まれます。
編集者注 – NGINX Plus R7の主な新機能の詳細については、以下の関連記事をご覧ください。
- NGINX PlusがHTTP/2を完全サポート
- NGINXのスレッドプールでパフォーマンスが9倍に向上!
- NGINXにおけるソケットシャーディング
- リリース7の新しいNGINX Plusダッシュボード<.htmla>
- NGINX Plus R7におけるTCPロードバランシング<.htmlspan>
オンデマンドウェビナー「NGINX Plus R7の新機能」もぜひご覧ください。
このリリースの主な機能は次のとおりです。
- HTTP/2の完全サポート実装 – NGINX Plusは、新しいHTTP/2 Web標準の完全サポート実装を提供するようになりました。NGINX Plusは、新規および既存のWebサービス向けのフロントエンドHTTP/2ゲートウェイ兼アクセラレーターとして導入できます。
HTTP/2のサポートは、オプションのnginx-plus-http2パッケージでのみ利用できます。nginx-plusおよびnginx-plus-extrasパッケージはSPDYをサポートしており、ブラウザーの対応範囲が広く、コードの成熟度も高いため、現時点では本番サイトに推奨されています。注記:ユーザーによるアルファレベルのパッチのテストと、共同企業スポンサーであるAutomatticおよびDropboxからの早期支援を受け、HTTP/2の最終オープンソース版はR7のリリース後に提供される予定です。 - パフォーマンスを大幅に向上 – NGINX Plus R7は、スレッドプールによる非同期I/Oをサポートします。これにより、コンテンツキャッシュなど、大量のディスクI/Oを伴うワークロードが高速化されます。F5のベンチマークでは、特定のワークロードにおいて、スレッドプールにより最大9倍のパフォーマンス向上が可能であることが示されています。
NGINX Plus R7は、マルチコアサーバーのパフォーマンスを向上させるソケットシャーディングの最適化にも対応しています。F5のベンチマークでは、これにより1秒あたりのリクエスト数を3倍以上に増やし、レイテンシを3分の1未満に短縮できることが示されています。ソケットシャーディングではSO_REUSEPORTオプションを使用し、現時点ではLinux 3.9以降またはDragonFly BSDが必要です。 - アクセス制御とセキュリティの強化 – NGINX Plusの新機能と拡張機能は、アプリケーションのセキュリティと信頼性の向上に役立ちます。TCPサービスのアクセス制御と接続制限により、NGINX‑managedのすべてのサービスに保護ルールを適用できます。また、NT LAN Manager(NTLM)認証のサポートにより、レガシーMicrosoftアプリケーションの前段にNGINX Plusを導入できます。
- 監視と診断の強化 – NGINX Plusでは、既存のステータスツールとダッシュボードツールに、さらに詳細な監視データと統計データが追加されました。クライアントエラー、NGINX内部のアクティビティ、サービスのSSL負荷を追跡することで、問題の特定や構成の調整に役立ちます。
- 更新されたインタラクティブなNGINX Plusダッシュボード – NGINX Plusのライブアクティビティ監視ダッシュボードが大幅に拡張され、タブ形式のインターフェースでNGINXのパフォーマンスと健全性をより詳細に確認できるようになりました。ドリルダウンしてインフラストラクチャの問題を特定・把握し、構成を迅速に変更できます。
「この1年間で、数百社に上る新規のお客さまによるNGINX Plusを活用したアプリケーションの導入を支援してきました。今回の最新リリースでは、お客さまがユーザーに可能な限り優れたエクスペリエンスを提供できるよう、さらに多くのツールを提供することに重点を置いています」と、NGINX, Inc.のCEOであるGus Robertsonは述べています。「NGINXはお客さまのインフラストラクチャを支える基盤であり、その立場だからこそ、お客さまが導入するアプリケーションに対して比類のない可視性と制御を提供できます。お客さまのビジネスにおいて担う重要な役割を真摯に受け止めており、その姿勢がNGINX Plus R7の新機能に反映されています」
ここ数か月で、NGINXの導入が大幅に拡大しています。NGINXは、上位100,000サイトでシェア第1位のWebサーバーであり、世界で最もアクセスの多いサイトの半数近くが、数十億人のユーザーにアプリケーションを配信するためにNGINXを使用しています。NGINX, Inc.は、最小かつ軽量なアプリケーションから世界最大規模のプラットフォームまで、あらゆる規模で高品質なアプリケーション配信を容易に実現できるよう、オープンソースツールと商用サポート付きツールの両方に引き続き積極的に投資しています。
NGINX Plus R7の機能詳細
このセクションでは、NGINX Plus R7のすべての新機能について詳しく説明します。
HTTP/2の完全サポート実装
NGINX Plus R7は、新しいnginx-plus-http2パッケージを通じて、HTTPプロトコルの最新バージョンであるHTTP/2をサポートします。HTTP/2により、最新のWebアプリケーションのパフォーマンスとセキュリティが向上します。NGINX PlusのHTTP/2サポートは、既存のサイトやアプリに変更を加えることなく、NGINX Plusの設定を最小限変更するだけでシームレスに利用できます。NGINX Plus R7は完全な後方互換性を備え、HTTP/1.xとHTTP/2のトラフィックを並行して配信できるため、ユーザーがどのブラウザを選んでも最適なエクスペリエンスを提供できます。

HTTP/2への移行を容易にするため、NGINX Plusは「HTTP/2ゲートウェイ」として機能します。フロントエンドでは、HTTP/2に対応するクライアントWebブラウザーとHTTP/2で通信し、バックエンドでは従来どおりHTTP/1.x(またはFastCGI、SCGI、uWSGIなど)で通信します。そのため、NGINX PlusがプロキシするサーバーやアプリケーションはHTTP/2への移行による影響を受けず、クライアントが使用しているHTTPのバージョンを把握する必要もありません。
HTTPSとHTTP/2を併用できるように、NGINX PlusはTLSのNext Protocol Negotiation(NPN)拡張とApplication‑Layer Protocol Negotiation(ALPN)拡張の両方をサポートしています。クライアントとサーバーの両方がHTTP/2をサポートしている場合、これらの拡張によりHTTPS接続をシームレスにHTTP/2へアップグレードできます。
必要な設定変更は、既存のhttp2パラメーターをlistenディレクティブに追加することだけです。HTTP/2は、sslパラメーターも指定されている場合にのみサポートされます。
server { listen 443 ssl http2 default_server;
}HTTP/2のサポートを有効にするには、NGINX Plusリポジトリからnginx-plus-http2パッケージをインストールします。このパッケージはSPDY/3.1をサポートしていません。標準のnginx-plusパッケージとnginx-plus-extrasパッケージは、HTTP/2ではなくSPDY/3.1をサポートしています。ブラウザーのサポート範囲が広く、コードの成熟度も高いため、現時点では本番サイトでの使用にこれらのパッケージを推奨します。なお、現在、nginx-plus-extrasパッケージのHTTP/2対応版はビルドしていません。
HTTP/2の詳細については、以下をご覧ください。
- HTTP/2について必要な情報を網羅したホワイトペーパーをご覧ください。
- F5の特別版High Performance Browser Networking電子書籍(GoogleのIlya Grigorik著)をダウンロードしてください。
パフォーマンスを大幅に向上
NGINX Plus R7には、アプリケーションのパフォーマンスをさらに向上させるのに役立つ複数の機能強化が含まれています。また、スレッドプール最適化がサポートされ、ブロッキングが発生する可能性のあるディスク処理をオフロードすることで、コンテンツキャッシュなど、大量のディスクI/Oを伴うワークロードのパフォーマンスを向上させます。NGINX Plus R7には、ソケットシャーディング最適化も含まれています(Linux 3.9以降またはDragonfly BSDが必要)。これは、多数のnginxプロセスでトラフィックを処理する大規模なマルチコアサーバーの効率を向上させます。これらの最適化は、NGINX Open Source環境で実地検証されており、現在はNGINX Plusの一部として完全にサポートされています。
スレッドプール
NGINX Plusでスレッドプールを使用すると、パフォーマンスが9倍向上する可能性があります。NGINXが接続処理に非同期のイベント駆動型アプローチを採用していることは広く知られています。しかし、このアプローチにもブロッキングという問題があります。Linuxではディスク操作がブロッキング処理となるため、大量のディスクI/Oを伴う処理では、NGINXが本来の処理よりもブロッキングに多くの時間を費やすことがあります。
ディスクI/Oを処理するスレッドプールを割り当てることで、この問題を軽減できます。NGINXワーカープロセスは、ディスクに直接アクセスする代わりに、I/O処理をプール内の空いているスレッドに引き渡し、通常どおりトラフィックの処理に戻ります。ディスク処理が完了するとNGINXワーカープロセスに通知され、リクエストへの応答に必要な残りの処理を続行できます。
スレッドプールを有効にするには、aio threadsディレクティブをlocationブロックに追加するだけです。
location / { root /storage;
aio threads;
}NGINXのスレッドプールに関する包括的な概要については、こちらの「ブログ記事」をご覧ください。
ソケットシャーディング
ソケットシャーディングは、NGINX 1.9.1で初めて導入されました。この機能は、Linuxカーネルのバージョン3.9で導入されたSO_REUSEPORTソケットオプションを利用します。このオプションを有効にすると、Linuxカーネル自体が新しい接続をラウンドロビン方式でNGINXワーカープロセスに均等に分散します。その後、ワーカープロセスがリクエスト制限、キャッシュ、負荷分散など、設定されたすべての処理を実行します。
Without SO_REUSEPORTを使用しない場合、新しい接続は利用可能なすべてのワーカープロセスによる取り合いとなり、キューから最初に接続を取得したプロセスがその接続を処理します。負荷を均等に分散するアルゴリズムがないため、少数のワーカープロセスに負荷の大半が集中し、ほかのプロセスが十分に活用されないなど、負荷が偏りやすくなります。また、プロセス間でパケットを取り合うとロック競合につながる可能性があるため、非効率です。
ソケットシャーディングでは、NGINXワーカープロセス間で処理を均等に分散することで、パフォーマンスを最大3倍まで向上させることができます。この機能を有効にするには、既存のreuseportパラメーターをlistenディレクティブに追加します。
server { listen 12345 reuseport;
# ...
}この機能の詳細については、こちらのブログ記事をご覧ください。
注:この機能を使用するには、Linuxカーネルバージョン3.9以降が必要です。Ubuntu 13.10以降およびRed Hat Enterprise Linux 7以降には、必要な機能が含まれています。
アクセス制御とセキュリティの強化
NGINX Plus R7では、アプリケーションのセキュリティを強化するための機能がさらに追加されています。このセクションでは、それらの機能の概要を説明します。
TCPアクセス制御と制限
TCPプロキシとロードバランシングの新機能により、アクセス制御(IPアドレスによる制限)、接続制限(クライアントまたはサービスごとの同時接続数の制限)、帯域幅使用量の制御(接続ごとのアップストリームまたはダウンストリーム帯域幅の制限)が強化されます。これらの機能はHTTPロードバランシングですでに利用可能であり、API使用量の計測やDDoS対策に大きな成果を上げています。
詳細については、関連するブログ記事「NGINX Plus R7におけるTCPロードバランシング<.htmlspan>」をご覧ください。
NTLMサポート
多くのご要望にお応えし、NGINX Plus R7では、認証にMicrosoft NT LAN Manager(NTLM)を使用するアプリケーションのプロキシ処理と負荷分散が可能になりました。NTLMは、多くのMicrosoft製品、特にレガシーアプリケーションで使用されている認証プロトコルです。
NTLMのサポートでは、バックエンドサーバーへの接続を維持しつつ多重化しないというセキュリティ要件を満たすため、NTLM認証済みの各クライアントに対して、バックエンドサーバーへの一意の専用接続を確保します。
NTLMサポートを有効にするには、HTTPアップストリームグループの設定にntlmディレクティブを追加します。
upstream backend { server 192.168.1.10;
server 192.168.1.11;
ntlm;
}これにより、Microsoftアプリケーションの前段にNGINXをプロキシ、ロードバランサー、HTTP/2アクセラレーターとして安心して導入し、可能な限り幅広いクライアントデバイスをサポートできるようになりました。
監視と診断の強化
NGINX Plusは、アプリケーションとインフラストラクチャの監視、最適化、デバッグを容易にする詳細なモニタリング情報と統計を提供します。この機能を基盤として、NGINX Plus R7には新しいカウンターと統計が多数追加されています。これらのカウンターは、NGINX Plusのデプロイメントの調整に役立つほか、負荷の増加に対応するためにスケールアップまたはスケールアウトが必要となるタイミングを適切に判断するうえでも役立ちます。新しい統計とカウンターは次のとおりです。
499エラー –499エラーを追跡するサーバー単位のカウンターです。このエラーは、バックエンドサーバーがリクエストの処理を完了する前に、クライアントが接続を閉じた場合に発生します。少数の499エラーは許容範囲です(セッションの途中でWebブラウザーを閉じることはよくあります)が、多数発生している場合は、サーバーが過負荷状態にあり、リクエストの処理に時間がかかっている可能性があります。- NGINX Plusワーカーの再起動 – NGINX Plusワーカーが再起動した回数です。NGINX Plusワーカープロセスのクラッシュ検出に役立ちます。
- NGINX Plusのリロード – NGINX Plusがリロードされた回数。NGINX Plusが実際にリロードされたか、不適切な設定などのさまざまな理由でリロードに失敗したかを確認できます。
- キューオーバーフロー – サーバーが負荷をどの程度適切に処理できているかを測定する、サーバー単位のカウンターです。キューオーバーフローの回数が多い場合、そのサーバーが負荷の処理に追いついていないことを示します。
- SSLハンドシェイク – 完了したSSLハンドシェイクの数。
- 再利用されたSSLセッション – 以前のセッションから再利用されたSSLセッションの数。
- 新規SSLセッション – 新たにネゴシエートされたSSLセッションの数。
他のすべてのカウンターと同様に、設定にapiディレクティブを含めることで、新しいカウンターを有効にできます。
刷新されたインタラクティブなNGINX Plusダッシュボード
The NGINX PlusダッシュボードはR7で大幅に改善され、大規模で複雑な構成でも、主要なシステム情報を簡潔に表示します。

- 新しい[ダッシュボード]概要タブでは、NGINX Plusのアクティビティとアプリケーションの健全性を1ページで包括的に確認できます。
- ダッシュボードのインターフェースでは、ロードバランシングプール内のサーバーを一時的に追加または削除できるほか、サーバーを一時的にドレイン中または非アクティブとしてマークできます。
- 新しいフィルターを使用すると、すばやく絞り込み、障害が発生したサーバーを特定できます。
- 新しいタブ形式のビューでは、ダッシュボードタブから、ゾーン、アップストリーム、キャッシュ情報の詳細ビューへすばやく切り替えられます。
- ダッシュボード全体に追加された新しいツールチップで、アップストリームサーバー、設定の再読み込み、キャッシュのステータス、エラーメッセージの詳細を確認できます。
詳細については、関連記事をご覧ください。新しいNGINX Plusダッシュボード<.htmla>。
さらに便利な機能
NGINX Plus R7には、上記のいずれのカテゴリーにも該当しない追加の機能強化がいくつかあります。
- HLSストリーミングの改善 – NGINX Plusは、HLSの「
start」、「end」、「offset」引数を.m3u8 URIでサポートするようになりました。これにより、コンテンツ配信者は動画ストリームの一部へのリンクを簡単に公開できます。 - コンテンツの変更 – 以前のNGINX Plusでは、レスポンスのコンテンツ内で文字列を別の文字列に置換するという、単純な変更を1つだけ行うことができました。
sub_filterディレクティブが拡張され、変数や連続した置換がサポートされたことで、より複雑な変更が可能になりました。拡張されたコンテンツ変更機能により、メッセージ内のハイパーリンクについて、たとえばプロトコル(https://をhttp://の代わりに使用)、ドメイン、その他のパス要素を変更するなど、Webコンテンツを容易に調整できます。また、元のHTMLコンテンツを変更することなく、定型文やJavaScriptスニペットなどのコンテンツをHTMLページに挿入することもできます。 $upstream_connect_time変数 – バックエンドサーバーへの接続にかかる時間を追跡する新しいNGINX変数です。応答の遅いサーバーを特定しやすくなります。- 設定ダンプ – 新しい
‑Tフラグをnginxコマンドに指定すると、解析済みのNGINX設定が明確かつ標準化された形式で標準出力にダンプされます。設定のアーカイブやサポートチケットの送信時に役立ちます。 - より柔軟に設定できるTCPロードバランシング –
proxy_bind、proxy_protocol、tcp_nodelayディレクティブ、およびbacklogディレクティブのlistenパラメーターが、HTTPトラフィックに加えてTCPトラフィック(streamモジュール)でもサポートされるようになりました。詳細については、「NGINX Plus R7のTCPロードバランシング<.htmlspan>」をご覧ください。 - Redisのサポート – サードパーティ製の「Redis」モジュール(lua-resty-redis)がnginx-plus-extrasパッケージに組み込まれました。これにより、NGINX PlusはRedisデータベースと連携し、値の取得や設定などを行えます。また、NGINX Plusサブスクリプションの一部として全面的なサポートが提供されます。
- Phusion Passengerモジュールの更新 – Phusion Passenger Open Sourceモジュールがバージョン5.0.15に更新されました。
NGINX Plusとの互換性を確保するためのPhusion Passenger Open Sourceのアップグレード
If you use Phusion Passenger Open SourceをNGINX Plusと併用しており(構成にpassenger_rootディレクティブが含まれている場合)、NGINX Plus R7のnginx-plus-extrasパッケージへのアップグレードと同時に、Passengerランタイムをバージョン5.0.15にアップグレードする必要があります。以下の手順を実行してください(コマンドはUbuntu向けです)。
- NGINX Plusを停止します:
# service nginx stop- Phusion Passengerランタイムを5.0.15にアップグレードします:
# apt-get install passenger- NGINX Plus ExtrasパッケージをR7にアップグレードします:
# apt-get install nginx-plus-extras- Phusion Passengerの「アップグレードノート」に記載されているとおり、NGINX Plusの設定ディレクティブに必要な更新を行います。
- NGINX Plusを起動します:
# service nginx startNGINX Plusのインストールおよびアップグレードの詳しい手順については、カスタマーポータルをご覧ください。
NGINX Plusへのアップグレードまたはお試し
NGINX Plusをご利用の場合は、できるだけ早くRelease 7へアップグレードすることを強く推奨します。アップグレードにより、複数の修正と改善が適用されるほか、サポートチケットを起票する必要が生じた際に、F5がより円滑にサポートできるようになります。インストールおよびアップグレードの手順については、カスタマーポータルをご覧ください。
まだNGINX Plusをお試しでない場合は、Webアクセラレーション、負荷分散、アプリケーションデリバリに加え、強化された監視および管理APIを備え、充実したサポートを受けられるWebサーバーとして、ぜひお試しください。今すぐ無料の30日間評価版を利用して、NGINX Plusがアプリケーションのスケールアウトと配信にどのように役立つかをご確認いただけます。
注意事項
- これらのディストリビューションに対する一般的なサポートが終了したため、NGINX Plus R7ではDebian 6、SLES 11 SP3、Ubuntu 10.04 LTSおよび14.10がサポートされなくなりました。NGINX Plus R7にアップグレードする前に、サポート対象のオペレーティングシステムディストリビューションにアップグレードしてください。
- NGINX Plus R7は、nginx-plus-luaパッケージを含む最後のリリースです。このパッケージを使用している場合は、NGINX Plus Release 8でnginx-plus-extrasパッケージに移行する計画を立ててください。
- nginx-plus-http2パッケージをインストールする前に、設定内のすべての
spdyパラメーターをlistenディレクティブから削除する必要があります(HTTP/2のサポートを有効にするには、代わりにhttp2およびsslパラメーターを指定します)。nginx-plus-http2パッケージを使用している場合、いずれかのlistenディレクティブにspdyパラメーターが指定されていると、NGINX Plusは起動に失敗します。
著者について

関連するブログ記事
チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。
AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。
JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。
F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。
NGINX PlusによるAWS Auto Scalingグループの負荷分散
新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります