NGINX Plus リリース 27 (R27)が利用可能になったことをお知らせします。 NGINX オープンソースをベースにした NGINX Plus は、唯一のオールインワンソフトウェア Web サーバー、ロード バランサー、リバース プロキシ、コンテンツ キャッシュ、API ゲートウェイです。
NGINX Plus R27の新機能と強化された機能は次のとおりです。
health_check
ディレクティブの新しいkeepalive_time
パラメータは、ヘルスチェックのキープアライブ接続を有効にし、その有効期間を設定します。 新しい接続を確立するには計算コストがかかるため、上流サーバーの数が大量にある場合は接続を再利用すると CPU 使用量を大幅に削減できます。401
(無許可)
。 NGINX Plus R27では、 auth_jwt_require
ディレクティブにエラー
パラメータが導入され、コードを次のように設定できるようになりました。401
または403
(禁止)
認証エラーと承認エラーをより適切に区別するために、各チェックで使用します。ngx.fetch
関数の動作を微調整するための新しいディレクティブと、njs バージョンを 16 進数として報告する新しいオブジェクトが含まれています。 Prometheus-njsモジュールは、追加の NGINX Plus メトリックを Prometheus 準拠の形式に変換できるようになりました。これには、コード
フィールド (アップストリームおよび仮想サーバーの個々の HTTP ステータス コードの数を報告する) と、制限接続モジュールおよび制限リクエスト モジュールによって生成されるメトリックが含まれます。このリリースでは、 NGINX Plus APIの新しいバージョン番号 (8) と、Linux カーネルで EPOLLEXCLUSIVE モードが使用される場合の接続のより均等な分散が追加されました。
注記: NGINX Plus R26以外のリリースからアップグレードする場合は、現在のリリースと今回のリリースの間のすべてのリリースのアナウンスブログの「動作の重要な変更」セクションを必ず確認してください。
サポートされる新しいオペレーティング システム:
削除された古いオペレーティング システムとアーキテクチャ:
NGINX Plus R28 で非推奨となり削除が予定されている古いオペレーティング システムとアーキテクチャ:
NGINX Plus とアップストリーム サーバー間のキープアライブ接続により、リバース プロキシおよび負荷分散の使用例のパフォーマンスが大幅に向上します。 特に HTTPS 経由のプロキシの場合、新しい接続ごとに必要な完全な TLS ハンドシェイクの計算コストが、特に多数のアップストリーム サーバーがある実稼働環境では、コンピューティング リソースに負担をかける可能性があります。
以前のリリースでは、NGINX Plus はヘルスチェックにキープアライブ接続を使用せず、代わりにヘルスプローブごとに新しい接続を確立していました。 NGINX Plus R27 では、 HTTP ヘルスチェック用のキープアライブ接続が導入されています。 health_check
ディレクティブの新しいkeepalive_time
パラメータは、各キープアライブ接続の有効期間を設定し、その期間が過ぎると新しい接続が確立されます。 当社のテストでは、HTTPS 経由のプロキシの場合、キープアライブ接続により、NGINX Plus サーバーでのヘルスチェックの CPU 使用率が 10 ~ 20 倍削減されることが示されています。 また、アップストリーム サーバーの CPU リソースも節約します。
次の例では、有効期間が 60 秒のキープアライブ接続を有効にします。 間隔
パラメータによって設定された 1 秒のヘルスチェック頻度を考えると、NGINX Plus では TLS ハンドシェイクと接続確立のコストが 60 回のヘルスチェックごとに 1 回だけ発生します。
トランスポート層セキュリティ (TLS) は、インターネット上のデータ暗号化の事実上の標準プロトコルです。 残念ながら、データを保護すると遅延も発生します。 カーネルに TLS を実装する (kTLS) と、ユーザー空間とカーネル間のコピー操作の必要性が大幅に減少し、静的コンテンツを提供する際のパフォーマンスが向上します。
kTLS とsendfile()
システム コールを組み合わせると、データは TLS ライブラリを使用して暗号化するためにユーザー空間にコピーされ、その後、送信前にカーネル空間にコピーし直されるのではなく、カーネル空間で直接暗号化されてからネットワーク スタックに渡され、送信されます。kTLS では、TLS 対称暗号化処理のネットワーク デバイスへのオフロードを含む、TLS 処理のハードウェアへのオフロードも可能になります。
kTLS をサポートするには、次の 3 つの要件があります。
2021 年 10 月に、要件 1 と 2 を満たすプラットフォーム上のNGINX Open Source 1.21.4 に kTLS のサポートが追加されました。 現在、以下のプラットフォーム上の NGINX Plus に kTLS のサポートが追加されています。
NGINX Plus をリバース プロキシまたはロード バランサーとして導入すると、 NGINX Plus API は各アップストリーム サーバーおよび仮想サーバーのトラフィック、応答コード、レイテンシに関する豊富なメトリック セットを提供し、顧客がサーバーのパフォーマンスと可用性を観察および監視できるようにします。
以前のリリースでは、NGINX Plus とアップストリーム サーバーの間で HTTPS 接続が使用された場合、 http
コンテキストとストリーム
コンテキストの両方 (それぞれproxy_pass
https: //path-to-upstream
とproxy_ssl
on
ディレクティブで確立) で、NGINX Plus はシステム全体のレベルで TLS アクティビティとエラーに関するメトリックを生成しました。 統計には、ハンドシェイク、失敗、セッションの再利用( proxy_ssl_session_reuse
ディレクティブで設定されている) が含まれます。
NGINX Plus R27 は、構成にゾーン
ディレクティブが含まれる個々のアップストリーム サーバーと、構成にstatus_zone
ディレクティブが含まれる仮想サーバーに対してこれらの TLS メトリックを生成します。 クライアント側とサーバー側の両方からのメトリックを取得すると、TLS ハンドシェイクの問題をトラブルシューティングするときに役立ちます。
次の例では、アップストリーム サーバーupstream1と、それにトラフィックをプロキシする仮想サーバーで統計収集を有効にします。
この出力は、最初のアップストリーム サーバーが 4 つの TLS ハンドシェイクと 2 つの再利用セッションに参加したことを示しています (簡潔にするために、最初のサーバーの部分的な出力を示し、他のアップストリーム サーバーの出力は省略しています)。
$ curl http://127.0.0.1:8000/api/8/http/upstreams/upstream1 | jq { "peers": [ { "id": 0、「サーバー」: "127.0.0.1:8081", "名前": "127.0.0.1:8081", "バックアップ": false, "重み": 1、「状態」:「アップ」、「アクティブ」: 0, "ssl": { "ハンドシェイク": 4、「ハンドシェイクに失敗しました」: 0、「セッション再利用」: 2 } 、「リクエスト」: 4、「ヘッダー時間」: 4、「応答時間」: 4、... } ... ] }
この出力は、NGINX Plus が 7 つの TLS ハンドシェイクに参加したことを示しています。
$ curl http://127.0.0.1:8000/api/8/http/server_zones/srv | jq { "処理中": 0、「リクエスト」: 7、「応答」:{「1xx」: 0、「2xx」: 7、「3xx」: 0、「4xx」: 0、「5xx」: 0, "コード": { "200": 7 }, "合計": 7 }, "破棄": 0、「受信済み」: 546、「送信済み」: 1134, "ssl": { "ハンドシェイク": 7、「ハンドシェイクに失敗しました」: 0、「セッション再利用」: 0 } ... }
NGINX Plus API は、以前の NGINX Plus リリースで利用可能なグローバル TLS メトリックを引き続き収集することに注意してください。
$ curl http://127.0.0.1:8000/api/8/ssl | jq { "ハンドシェイク": 21、「ハンドシェイクに失敗しました」: 0、「セッション再利用」: 6 }
NGINX Plus R25では、JWT 検証プロセス中にカスタム チェックを定義するためのauth_jwt_require
ディレクティブが導入されました。 NGINX Plus R25およびR26では、検証失敗時に返されるエラーコードは常に401
(無許可)
。
NGINX Plus R27では、 auth_jwt_require
ディレクティブにエラー
パラメータが導入され、これを使用してコードを次のように設定できます。401
または403
(禁止)
各ディレクティブごとに独立して実行します。 ユーザーのアクセス要求が失敗した場合、コードを選択することで、認証失敗 (JWT が無効) と承認失敗 (必要なクレームが欠落している) を区別することができます。 また、エラー コードに対してカスタマイズされたハンドラーを作成して、エラーを説明する特別なページを返す ( error_page
ディレクティブを使用) か、リクエストを名前付きの内部の場所にリダイレクトしてさらに処理を進めることもできます。
デフォルトのステータスコードはそのまま401
次の種類の JWT チェックに失敗した場合:
auth_jwt_require
で設定されているがエラー
パラメータが設定されていないカスタムチェックロケーション
ブロック内に複数のauth_jwt_require
ディレクティブがある場合、それらは出現順に評価されます。 最初の失敗で処理が停止し、指定されたエラー コードが返されます。
この例では、 auth_jwt_require
ディレクティブは403
$req1
または$req2
のいずれかが空の値に評価された場合、または0
(ゼロ)。
NGINX Plus R27にはバージョンが組み込まれています0.7.3そして0.7.4NGINX JavaScript モジュールの次の機能強化が含まれています。
NGINX Plus R24に組み込まれた NGINX Javascript 0.5.3 では、TCP/UDP 接続のコンテキスト内から単純な HTTP クライアントをインスタンス化するためのngx.fetch
関数 (Fetch API とも呼ばれる) が導入されました。 (この機能の使用例については、弊社のブログの「Leveraging HTTP Services for TCP.htmlUDP with a Simple HTTP Client 」をご覧ください。)
NGINX Plus R27 では、 Fetch API の動作を微調整するための次のディレクティブが導入されています。
js_fetch_buffer_size
[ HTTP ][ Stream ] – 読み取りと書き込みに使用するバッファのサイズを設定します。js_fetch_max_response_buffer_size
[ HTTP ][ Stream ] – Fetch API で受信する応答の最大サイズを設定します。js_fetch_timeout
[ HTTP ][ Stream ] – 連続する 2 つの読み取りまたは書き込み操作間の読み取りと書き込みのタイムアウトを定義します (応答全体ではありません)。 タイムアウト期間内にデータが送信されない場合、接続は閉じられます。js_fetch_verify
[ HTTP ][ Stream ] – HTTPS サーバー証明書の検証を有効または無効にします。新しいnjs.version_number
オブジェクトは、njs モジュールのバージョンを 16 進数として報告します。 (既存のnjs.version
オブジェクトはバージョンを文字列として返します。)
NGINX Plus メトリックを Prometheus 準拠の形式に変換するPrometheus-njsモジュールは、以下の追加エンドポイントで公開されるメトリックを変換できるようになりました。
/http/接続制限
/http/制限要件
/http/server_zones
および/http/upstreams
のコード
フィールド (個々の HTTP ステータス コードの数を報告する <.htmla>)/ストリーム/接続制限
NGINX Plus APIのバージョン番号が 7 から 8 に更新され、「アップストリームおよび仮想サーバーの TLS メトリック」で説明されているように、アップストリームおよび仮想サーバーに対して報告されるメトリックにssl
フィールドが追加されたことが反映されます。 以前のバージョン番号も引き続き機能しますが、出力にはそれ以降の API バージョンで追加されたメトリックは含まれません。
NGINX Plus R27 では、 Linux カーネルで EPOLLEXCLUSIVE モードが使用されている場合に、NGINX ワーカー プロセス間で接続がより均等に分散されます。 通常、このモードでは、カーネルはリスニング ソケットを EPOLL インスタンスに最初に追加したプロセスにのみ通知します。 その結果、ほとんどの接続は最初のワーカー プロセスによって処理されます。 NGINX は、他のワーカー プロセスに接続を受け入れる機会を与えるために、定期的にソケットを再追加するようになりました。
NGINX Plus を実行している場合は、できるだけ早くNGINX Plus R27にアップグレードすることを強くお勧めします。 また、いくつかの追加の修正と改善も行われ、サポート チケットを発行する必要があるときに NGINX がサポートしやすくなります。
NGINX Plus をまだお試しいただいていない方は、セキュリティ、負荷分散、API ゲートウェイとして、または強化された監視および管理 API を備えた完全にサポートされた Web サーバーとして、ぜひお試しください。 30 日間の無料トライアルを今すぐ開始できます。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"