ブログ | NGINX

NGINX Plus R30 の発表

NGINX-F5 水平黒タイプ RGB の一部
プラバート・ディクシット サムネイル
プラバート・ディクシット
2023年8月15日公開

NGINX Plus リリース 30 (R30) の提供開始をお知らせいたします。 NGINX オープンソースをベースにした NGINXPlus は、唯一のオールインワン ソフトウェア Web サーバー、ロード バランサー、リバース プロキシ、コンテンツ キャッシュ、API ゲートウェイです。

NGINX Plus R30 の新機能と強化された機能は次のとおりです。

  • QUIC+HTTP/3 のネイティブ サポート- NGINX Plus は HTTP/3 を公式にサポートするようになりました。 この実装は、QUIC プロトコル経由で HTTP/3 サポートを提供するために必要な、不足している OpenSSL TLS 機能を提供するためにサードパーティのライブラリに依存しません。 NGINX チームによって開発された OpenSSL 互換性レイヤーを使用して、OpenSSL でサポートされていない QUIC TLS インターフェースの課題を回避します。
  • ワーカーごとの接続テレメトリワーカーごとのレベルでの接続の監視がサポートされるようになりました。 これにより、ユーザーはワーカー プロセスの数を調整し、ワーカー間で接続を効果的に分散して最適なパフォーマンスを実現することで、NGINX のパフォーマンスを微調整できます。
  • 診断パッケージ NGINX 診断パッケージは、問題のトラブルシューティングに必要なすべてのデータを 1 つの圧縮ファイルに収集します。 これにより、NGINX Plus ユーザーと F5 サポート間のコミュニケーションが改善され、効率が向上し、問題解決までの時間が短縮されます。

このリリースの最後を飾るのは、 NGINX オープンソースから継承された新機能とバグ修正、および NGINX JavaScript モジュールの更新です。

行動における重要な変化

注記: NGINX Plus R29 以外のリリースからアップグレードする場合は、現在のバージョンとこのバージョン間のすべてのリリースについて、以前の発表ブログ「動作の重要な変更」セクションを必ず確認してください。

listen … http2ディレクティブの廃止

listen … http2ディレクティブは NGINX 1.25.1 では非推奨になりました。 nginx -tを使用した NGINX 構成チェックでは、その旨の警告が表示されます。  

nginx -t

nginx: [警告] 「listen ... http2」ディレクティブは非推奨です。代わりに etc/nginx/nginx.conf で「http2」ディレクティブを使用してください :15

nginx: 設定ファイル /etc/nginx/nginx.conf の構文は正常です

nginx: 設定ファイル /etc/nginx/nginx.conf のテストは成功しました

このディレクティブの既存のすべてのユーザーは、NGINX をアップグレードし、サーバーごとに HTTP/2 を有効にする http2 ディレクティブを使用することを強くお勧めします。

これを変更します:

443 ssl http2 をリッスンします。

これに対して:

listen 443 ssl;
http2 オン;

Amazon Linux 2 で GeoIP2 モジュールが利用できない

以前のバージョンの NGINX Plus では、Amazon Linux 2 EPEL リポジトリの「libmaxminddb」ライブラリを使用してGeoIP2 モジュールを構築していました。 EPEL リポジトリではこのライブラリが提供されなくなり、Amazon Linux 2 ディストリビューションからネイティブにアクセスすることもできなくなりました。 したがって、Amazon Linux 2 用にビルドする実行可能な方法がないため、このモジュールは NGINX Plus R30 では利用できなくなりました。

MQTT ディレクティブの変更

MQTT メッセージを構築するためのバッファのサイズを指定するために使用されるmqtt_rewrite_buffer_sizeディレクティブは、 mqtt_buffersディレクティブに置き換えられました。 新しいディレクティブを使用すると、接続ごとに割り当て可能なバッファの数と、各バッファのサイズを指定できるようになります。

更新された API バージョン

NGINX Plus API のバージョン番号は、Per-Worker Connection Telemetryで説明されているワーカーごとのメトリックの追加を反映するために 8 から 9 に更新されました。 以前のバージョン番号も引き続き機能しますが、出力にはそれ以降の API バージョンで追加されたメトリックは含まれません。

プラットフォームサポートの変更

サポートされる新しいオペレーティング システム:

  • デビアン12
  • アルパイン 3.18

削除された古いオペレーティング システム:

  • 2023年5月1日にサポート終了(EOL)となったAlpine 3.14
  • 2023年4月26日にEOLとなったUbuntu 18.04

NGINX Plus R31 で非推奨となり削除が予定されている古いオペレーティング システム:

  • Alpine 3.15は2023年11月にEOLを迎える予定

新機能の詳細

QUIC+HTTP/3 のネイティブサポート

HTTP/3 over QUIC は、多くの企業顧客から要望の多かった待望の機能であり、NGINX Plus R30 で正式に導入できることを嬉しく思います。 これは、今後のリリースでも引き続き注力していく新しいテクノロジーと実装です。 NGINX Plus ユーザーには、まず非本番環境で試してみて、貴重なフィードバックを共有することをお勧めします。

NGINX Plus は、オペレーティング システムに付属の SSL/TLS ライブラリを利用して、安全な通信と暗号化機能を実現するために OpenSSL に依存しています。 ただし、このリリース時点では QUIC の TLS インターフェースは OpenSSL でサポートされていないため、HTTP/3 に必要な TLS 機能が不足しているため、サードパーティのライブラリが必要になります。

この懸念に対処するために、NGINX チームはOpenSSL 互換性レイヤーを開発し、quictls、BoringSSL、LibreSSL などのサードパーティの TLS ライブラリを構築して出荷する必要がなくなりました。 これにより、カスタム TLS 実装の負担やサードパーティ ライブラリのスケジュールやロードマップへの依存なしに、NGINX でエンドツーエンドの QUIC+HTTP/3 エクスペリエンスを管理できるようになります。 今後のリリースでは、0-RTT のサポートなど、より多くの機能とオプションを追加して OpenSSL 互換性レイヤーを強化する予定です。

QUIC+HTTP/3 の設定は次のとおりです。
   

http {
        log_format quic '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                            '"$http_referer" "$http_user_agent" "$http3"';
         access_log logs/access.log quic;

         server {
            # 互換性を高めるために、quic と https に同じポートを使用することをお勧めします
             # listen 8443 quic reuseport;
            listen 8443 ssl;

            ssl_certificate     certs/example.com.crt;
            ssl_certificate_key certs/example.com.key;

            location / {
                # ブラウザが quic ポートに誘導するために必要
                 add_header Alt-Svc 'h3=":8443"; ma=86400';
            }
            }
     }

NGINX Plus R30 の QUIC+HTTP/3 サポートは、単一のバイナリとして利用できます。NGINX Plus R29 で導入された実験的な HTTP/3 サポートとは異なり、nginx quic には別のバイナリがありました。 この改善により、環境に機能を展開しやすくなります。

注記: NGINX Plus R30 では、スタンドアロン QUIC バイナリのサポートとアップデートを終了し、今年後半にダウンロード オプションから削除する予定です。

ワーカーごとの接続テレメトリ

NGINX Plus ユーザーは、ワーカー プロセスごとの合計接続を監視して、 worker_connectionsディレクティブを適切に調整できるようになりました。 この改善により、ユーザーはワーカー間で接続がどのように分散されているかをよりよく把握できるようになります。 ワーカー接続を調整できることは、NGINX の展開をより適切に評価するのにも役立ちます。

ワーカーごとの接続メトリックは、REST API 経由で利用できます。ワーカーごとの接続メトリックを取得するには、 …/api/9/workersエンドポイントを使用します。

個々のワーカーのワーカーごとの接続メトリックを取得するには、 .../api/9/workers/<ワーカー ID >エンドポイントを使用します。 ワーカー ID には0 から始まるインデックスがあります。

応答の例は次のとおりです。

{
    {
        "id": 0,
        "pid": 2346,
        "接続": {
            "承認済み": 1,
            「ドロップ」: 0,
            「アクティブ」: 1,
            「アイドル」: 0
        },
        "http": {
            "リクエスト": {
                "合計": 15,
                「現在」: 1
            }
        }
    },
    {
        "id": 1,
        "pid": 1234,
        "接続": {
            "承認済み": 3、
            「ドロップ」: 0,
            「アクティブ」: 1,
            「アイドル」: 0
        },
        "http": {
            "リクエスト": {
                "合計": 15,
                「現在」: 1 } } }, ... }

ワーカーごとの接続メトリックは、以下に示すように、 NGINX Plus ライブ アクティビティ モニタリング ダッシュボードで確認できます。 この機能のライブ デモは、demo.nginx.com でご覧いただけます。

NGINX Plus ライブアクティビティモニタリングダッシュボードには、NGINX Plus の接続とリクエストに関する以下の情報が表示されます。

ダッシュボードには、NGINX Plus の接続とリクエストに関する以下の情報が表示されます。

接続:

  • ワーカーあたりの受け入れ可能な接続数
  • ワーカーあたりのアクティブ接続数
  • ワーカーあたりのアイドル接続数
  • ワーカーあたりの切断された接続数

リクエスト:

  • 労働者あたりの現在のリクエスト数
  • ワーカーあたりのリクエスト総数
  • ワーカーあたりのリクエスト数/秒

診断パッケージ

問題解決の所要時間を短縮するために、診断パッケージは、NGINX 環境の問題のトラブルシューティングに必要なデータの収集プロセスを合理化します。 診断パッケージは、問題のトラブルシューティングに必要な情報を手動で要求して収集することに伴う矛盾や遅延を回避するのにも役立ち、 NGINX Plus の顧客と F5 サポート間のやり取りをより効率的にします。

診断パッケージでは以下の情報を収集します。

  • NGINX 情報– NGINX Plus のバージョン、構成、プロセス情報、サードパーティ モジュール、ログ、API 統計とエンドポイント
  • システム情報– ホストコマンド ( pslsofvmstatなど)
  • サービス情報systemdなど
  • NGINX エージェント– ログと設定 (存在する場合)
  • NGINX App Protect – ログと構成(存在する場合)
  • サポート パッケージ ログ– 収集されたすべてのファイルのリストを含むログ

診断パッケージを追加する目的は、パッケージ内のスクリプトが実行するコマンドと収集されるデータをユーザーに明確に伝えることです。 詳細については、 NGINX Plus 診断パッケージページを参照してください。

注記: 診断パッケージの可用性は、現在の NGINX Plus R30 リリースの一部として発表されています。ただし、診断パッケージは実際にはリリースに依存しません。 今後は、トラブルシューティング データ収集プロセスを改善する目的で、お客様と F5 サポートからのフィードバックに基づいて更新する予定です。

NGINX Plus R30のその他の機能強化

MQTT の最適化

Message Queuing Telemetry Transport (MQTT) フィルター モジュールのメモリ消費が改善され、スループットが 4 ~ 5 倍に増加しました。

ディレクティブmqtt_rewrite_buffer_sizeは削除されました。 代わりに、新しい指令は mqtt_buffers <数値> <サイズ> モジュールが接続ごとに割り当てることができるバッファの数と各バッファのサイズを指定するために導入されました。 デフォルトのバッファ数は 100 で、各バッファのデフォルトのサイズは 1024 バイトです。これにより、変数mqtt_buffers のデフォルト値は <100> <1024>になります。

DNS リロードの最適化

NGINX Plus では、リロード後も動的に解決されたアップストリーム ホストの DNS 名の有効期限が保持されるようになり、設定のリロード時に再解決する必要がなくなりました。 この更新の前は、すべてのアップストリームに対して DNS 解決がトリガーされていました。 このアップデートにより、NGINX はすべてのアップストリームの DNS 解決と有効期限を保持し、リロード時に新しいアップストリームまたは変更されたアップストリームに対してのみ DNS 解決をトリガーします。

この最適化は、多数のアップストリーム ホストを含む NGINX 環境に最も大きな影響を与えます。 NGINX 構成に 100 台以上のアップストリーム ホストがある場合、最適化の効果は最も顕著になります。

NGINXオープンソースから継承された変更

NGINX Plus R30 は NGINX Open Source 1.25.1 をベースとしており、NGINX Plus R29 のリリース以降に行われた機能変更、特徴、バグ修正 (NGINX 1.25.0 および 1.25.1) を継承しています。

変更点

  • HTTP/2 サーバー プッシュのサポートは削除されました。 HTTP/2 server_push は採用が最小限で、非常に限られたユースケースでのみ使用できました。 (IETF 102 リファレンス ドキュメントによると、セッションのわずか 0.04% で使用されました。 RFC 913 によれば、「効果的に使用することは困難」でした。) HTTP/2 サーバー プッシュはChrome バージョン 106 で無効になりました。 この変更の一環として、 http2_pushhttp2_push_preload 、およびhttp2_max_concurrent_pushesディレクティブは廃止されました。
  • 非推奨のsslディレクティブはサポートされなくなりました。 sslディレクティブは NGINX 1.15.0 で非推奨となり、listen ディレクティブのsslパラメータに置き換えられました。 非推奨の ssl ディレクティブは削除されました。
  • 前述のとおり、 listen … http2ディレクティブは非推奨です。 代わりにhttp2ディレクティブを使用することをお勧めします。
    • OpenSSL v1.0.2h 以降を使用した SSL 接続の場合、サーバー名識別 (SNI) によって選択された仮想サーバーで HTTP/2 プロトコルが有効になっていると、アプリケーション層プロトコル ネゴシエーション (ALPN) コールバックによって自動的に選択されます。
    • 古いバージョンの OpenSSL では、デフォルトの仮想サーバー構成に基づいて HTTP/2 プロトコルが有効になります。
    • プレーン TCP 接続の場合、デフォルトの仮想サーバーで HTTP/2 が有効になっていると、HTTP/2 が HTTP/2 プリフェイスによって自動検出されるようになりました。 プレファスが一致しない場合は、HTTP/0.9-1.1 が想定されます。
  • 同じリスニング ソケット上の Cleartext TCP (h2c) 経由の HTTP/2 と HTTP/1.1 のサポートが追加されました。 既存の実装では、ユーザーが h2c リスニング ソケット (例: listen port_num http2 ) を構成すると、HTTP/2 接続のみを作成できます。 h2 リスニング ソケットは、ALPN 経由のプロトコルのネゴシエーションにより、HTTP/1.1 と HTTP/2 の両方をサポートします。 ただし、既存の実装では、HTTP/1.1 クライアントはソケットで失敗し、プロトコルをネゴシエートする手段として HTTP アップグレードを使用できなくなります。 この変更により、HTTP/2 を使用するときに、プレーン TCP ソケットで HTTP/1.1 と HTTP/2 を同時にサポートできるようになります。
  • 一部の$sent_http_*によるバッファ オーバーランの可能性の回避が有効になっています。 マルチヘッダー$sent_http_変数を評価するロジックに欠陥があり、特定の要素がクリアされてもリンク リストに残っている場合に、潜在的なバッファ オーバーランが発生していました。 この問題は、サードパーティのモジュールを使用してマルチヘッダー値を上書きしたときに発生しました。 このアップデートでは、洗練された境界チェックが導入され、これらの変数のより安全な処理と評価が保証されます。

特徴

  • 完全な HTTP/3 サポートが追加されました。 NGINX 1.25.0 メインライン バージョンでは HTTP/3 のサポートが導入され、このサポートは NGINX Plus R30 に統合されました。 NGINX Plus R30 の実装には、NGINX Plus R29 で提供された実験的なパッケージと比較して、次の変更点があります。
  •  
    • quic_mtuディレクティブを削除しました
    • listen ディレクティブの http3 パラメータを削除しました
    • ストリームモジュールからQUICサポートを削除しました
    • HTTP/3 サーバープッシュを削除しました
    • OpenSSL 3.2+ での OpenSSL 互換性レイヤーの構築を修正しました

バグ修正

  • 正規表現 (regex) 調査リストの割り当てに失敗した場合のセグメント違反を修正しました。

最近のリリースから継承された新しい変更、機能、バグ修正、回避策の完全なリストについては、NGINX CHANGESファイルを参照してください。

NGINX JavaScript モジュールの変更

NGINX Plus R30 には、NGINX JavaScript (njs) モジュール バージョン 0.8.0 からの変更が組み込まれています。

特徴

  • グローバル NGINX プロパティを導入しました:
    ngx.buildngx.conf_file_pathngx.error_log_pathngx.prefixngx.versionngx.version_number 、およびngx.worker_id
  • ワーカープロセス間で共有される辞書を宣言できるようにする、 httpおよびストリーム用のjs_shared_dict_zoneディレクティブを導入しました。
  • ES13 準拠の配列メソッドを追加しました: Array.from()、Array.prototype.toSorted()、Array.prototype.toSpliced()、Array.prototype.toReversed()
  • ES13 準拠の TypedArray メソッドが追加されました: %TypedArray%.prototype.toSorted()、%TypedArray%.prototype.toSpliced()、%TypedArray%.prototype.toReversed()
  • WebCrypto APIに CryptoKey プロパティを追加しました。追加されたプロパティは、 algorithm、extractable、type、usages です

変更点

  • で導入されたFetch APIの禁止ヘッダーの特別な処理を削除しました。0.7.10
  • バージョン 0.5.0 で非推奨となったr.requestBody() をhttp モジュールから削除しました。 代わりにr.requestBufferまたはr.requestTextプロパティを使用する必要があります。
  • バージョン 0.5.0 で非推奨となったr.responseBody() をhttp モジュールから削除しました。 代わりに、 r.responseBufferまたはr.responseTextプロパティを使用する必要があります。
  • httpモジュールでフィルタリング中にr.internalRedirect()で例外がスローされます。
  • ネイティブ メソッドにはretval引数が提供されます。 この変更により、コードの変更が必要となる njs の C 拡張との互換性が失われます。
  • 非準拠の非推奨の String メソッドは削除されました。 以下のメソッドは削除されました: String.bytesFrom()、String.prototype.fromBytes()、String.prototype.fromUTF8()、String.prototype.toBytes()、String.prototype.toUTF8()、String.prototype.toString(encoding)
  • GNU readline を使用したビルドのサポートが削除されました。

バグ修正

  • httpモジュールでフィルタリングする際のr.statusセッターが修正されました。
  • httpモジュールのLocationヘッダーの設定を修正しました。
  • сrypto.getRandomValues()の retval を修正しました。
  • 関数式による計算プロパティ名の評価を修正しました。
  • 配列で宣言された関数式の暗黙的な名前を修正しました。
  • for-in ループの解析を修正しました。
  • ISO-8601 形式と UTC 時間オフセットを使用してDate.parse() を修正しました。

すべての機能、変更、バグ修正の包括的なリストについては、njs変更ログを参照してください。

NGINX Plus をアップグレードまたは試用する

NGINX Plus を実行している場合は、できるだけ早く NGINX Plus R30 にアップグレードすることを強くお勧めします。 素晴らしい新機能に加えて、いくつかの追加の修正と改善も得られます。最新の状態にしておくと、サポート チケットを発行する必要がある場合に NGINX がサポートしやすくなります。

NGINX Plus をまだお試しいただいていない方は、ぜひお試しください。 セキュリティ、負荷分散、API ゲートウェイのユースケースに使用したり、強化された監視および管理 API を備えた完全にサポートされた Web サーバーとして使用したりできます。 今すぐ30 日間の無料トライアルを始めましょう。


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"