ブログ | NGINX

NGINX Plus R21 の発表

NGINX-F5 水平黒タイプ RGB の一部
リアム・クリリー サムネイル
リアム・クリリー
2020年4月7日公開

NGINX Plus リリース 21 (R21)が利用可能になったことをお知らせします。 NGINX オープンソースをベースにした NGINX Plus は、唯一のオールインワンロード バランサー、コンテンツ キャッシュ、Web サーバー、API ゲートウェイです。 4 億 5,000 万を超える Web サイトが NGINX に依存しておりNGINX Plus R21 は、主に NGINX Open Source のバグ修正と安定性の向上に重点を置いており、これまで以上に信頼性とセキュリティが向上しています。

NGINX Plus R21の新機能は次のとおりです。

  • 動的 gRPC プロキシ– gRPC 接続をバックエンド gRPC サービスに渡すときに変数のサポートを追加しました。 これにより、クライアント属性に基づいて gRPC 接続をサービス グループに動的にルーティングできるようになります。
  • NGINX JavaScript モジュールの機能強化– NGINX JavaScript モジュール (njs) がバージョン 0.3.9 に更新され、いくつかのバグが修正され、サブリクエストとファイルシステムのサポートに関連する追加の機能強化が行われました。

行動における重要な変化

  • 許容可能なリクエストRFC 7230に従い、NGINX Plus は複数のホストヘッダーを持つクライアント リクエストを許可しなくなりました。
  • 新しいオペレーティング システムがサポートされました- Alpine Linux 3.11。
  • 古いオペレーティング システムはサポートされなくなりました- 32 ビット プラットフォーム (i386 アーキテクチャ)。

品質への投資

効率的なソフトウェアとコード品質は、オープンソースと NGINX Plus の両方において、NGINX を構築する際の中心的な信条です。

NGINX チームは、あらゆる商用ソフトウェアに期待される最新の CI/CD および自動テスト ツールをすべて採用しています。 毎日のテスト アクティブ開発ブランチの「欠陥密度」は、コード 1000 行あたりわずか 0.01 個と、同様のサイズのコードベースの平均密度である 1000 行あたり 0.7 個の欠陥と比較して、非常に低い値を示しています。

また、オープンソースと NGINX Plus コンポーネントの両方に対して、外部の独立した侵入テストとコードレビューを委託しています。 最新の侵入テストとコードレビューにより、このリリースで対処されているいくつかの問題が特定されました。

バグ修正

合計で、 NGINX Plus R21には 14 個のバグの修正が含まれています。

  • HTTP/2 使用時のソケット リーク (2 つの別々のバグ)
  • njsモジュールとaioディレクティブでサブリクエストを使用するとソケット リークが発生する
  • WebDavモジュールのメモリ不足の可能性
  • MP4モジュールの潜在的なメモリ漏洩
  • ステータスコード494代わりに返されました400コードにエラーがある場合494error_pageディレクティブでリダイレクトされた
  • SSL接続でパイプライン化されたリクエストを処理中にタイムアウトが発生する場合があります
  • OCSP ステープルを使用すると、ワーカープロセスでセグメンテーション違反が発生する可能性がある
  • 構成に空の置換文字列を含む書き換えディレクティブが含まれている場合、開始時または再構成中にセグメンテーション違反が発生する可能性がある。
  • breakディレクティブがaliasディレクティブと組み合わせて使用されたり、URIを指定したproxy_passディレクティブと組み合わせて使用されたりすると、ワーカープロセスでセグメンテーション違反が発生する場合があります。
  • 最初のTransfer-Encodingリクエスト ヘッダーのみが処理されました
  • リクエストURIがヌル文字を含むものに書き換えられた場合、 Locationレスポンスヘッダー行にゴミが含まれる可能性があります。
  • error_pageディレクティブを使用してリダイレクトを返すときに、本文を含むリクエストが誤って処理されました。
  • HTTP/2 使用時のdebug_pointsディレクティブのバグ

これらのバグはいずれも重大なものではなく、関連する CVE レコードも存在しないことに注意してください。

NGINX Plus ロードマップへの投資

このリリースの時点で、私たちは 2020 年のロードマップに懸命に取り組んでいます。 今年後半には、 HTTP/3 (別名 QUIC) の製品版実装が利用可能になる予定です。 このテクノロジーをフォローしたりテストしたりすることに興味がある場合は、今後数週間以内に公開される実験的なパッチに注目してください。

新機能の詳細

動的 gRPC プロキシ

NGINX Plus R15 では、アップストリーム グループへの gRPC トラフィックのルーティングと負荷分散のサポートが導入されました。 grpc_passディレクティブを含めることで、NGINX Plus を活用して gRPC トラフィックをルーティングできます。

NGINX Plus R21 では、 grpc_passディレクティブに変数サポートが導入され、gRPC ワークロードに拡張される動的な API 駆動型ルーティング ポリシーが提供されます。 これにより、次のようなユースケースに対応できるようになります。

  • A/B テスト- gRRC リクエストを複数のアップストリームに統計的に分散し、どのアップストリームのパフォーマンスが優れているかを判断します。
  • デバッグ ルーティング- トラフィックを本番環境の gRPC サービスにルーティングしますが、特定の属性 (送信元 IP アドレス、gRPC メタデータ) を持つリクエストをデバッグ gRPC サービスにルーティングします。

次の構成は、デバッグ ルーティングのサンプル実装です。

1 行目では、ネットワーク範囲をキーとして使用できるキー値ストアを定義します ( type=ipパラメータによって有効化されます)。 2 行目では、クライアント IP アドレス ( $remote_addr ) をキーとして使用して、 grpc-greeterキー値ストアで検索を実行し、 $greeter_upstream変数を評価することを指定します。

10 行目では、クライアントの IP サブネットに基づいて gRPC 要求の TLS 終了と動的ルーティングを行うために、 grpc_passディレクティブのパラメーターとしてgrpc://$greeter_upstream を指定します。

たとえば、NGINX Plus インスタンスで次のコマンドを実行して、192.168.80.0/24 サブネットから発信されたリクエストをgrpc-servers-greeter-debugにルーティングできます。

$ curl -iX POST -d '{"192.168.80.0/24":"grpc-servers-greeter-debug"}' http://localhost:8080/api/6/http/keyvals/grpc-greeter

gRPC トラフィックを本番サービス グループ ( grpc-servers-greeter-prod ) に切り替えるには、次のコマンドを実行します。

$ curl -iX PATCH -d '{"192.168.80.0/24":"grpc-servers-greeter-prod"}' https://localhost:8080/api/6/http/keyvals/grpc-greeter

NGINX JavaScript モジュールの機能強化

NGINX JavaScript モジュール (njs) がバージョン 0.3.9に更新され、いくつかのバグが修正され、サブリクエストとファイルシステムのサポートに関連する機能が強化されました。

サブリクエスト

r.subrequest関数を使用すると、njs コードで任意の URI に非同期 HTTP リクエストを行うことができます。これには多くの使用例がありますが、注目すべき例としては、 OAuth 2.0 トークン イントロスペクションなどの外部認証サーバーへの API 呼び出しが挙げられます。 このリリースでは、サブリクエストに、プロミスと分離されたサブリクエストという 2 つの重要な機能強化が加えられています。

[編集者注– 次の 2 つのサンプル使用例は、NGINX JavaScript モジュールの多くの使用例のうちのほんの一部です。 完全なリストについては、 「NGINX JavaScript モジュールの使用例」を参照してください。

約束

サブリクエストには通常、サブリクエストの応答を処理するコールバック関数が含まれます。 呼び出しコードにインラインで応答を処理する方法として JavaScript Promise を使用することで、コールバック関数を省略できるようになりました。 次の例は、コールバックを使用せずに、連続するサブリクエストを単一のコード シーケンスで連鎖させる方法を示しています。

分離されたサブリクエスト

サブリクエストは非同期であり、以前はjs_contentディレクティブから呼び出す必要がありました。 変数の評価中にjs_setディレクティブからサブリクエストをトリガーすることもできるようになりました。 これらの「分離された」サブリクエストは非同期的に動作しますが、呼び出し元の関数にデータを返さず、応答はすべて無視されます。

次のサンプル コードでは、交換されるデータの合計量が 1 MB を超える場合に、分離されたサブリクエストを使用して、リクエスト ヘッダーのコピーをセキュリティ情報およびイベント管理 ( SIEM ) システムに送信します。

[ 編集者 – 次の設定は、NGINX Plus R23<.htmla> のjs_includeディレクティブに代わるjs_importディレクティブ使用するように更新されました。 詳細については、 NGINX JavaScript モジュールのリファレンス ドキュメントを参照してください。構成例のセクションに、NGINX 構成と JavaScript ファイルの正しい構文が示されています。

次に、アクセス ログを書き込むときに変数の評価を要求することにより、ログ フェーズで JavaScript コードが実行されます。

ファイルシステム

JavaScript ファイルシステム オブジェクトfsが強化され、非同期操作の promise がサポートされるようになりました。 さらに、 access()realpath()symlink()unlink()という新しいファイルシステム メソッドがあります。

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

NGINX Plus を実行している場合は、できるだけ早くNGINX Plus R21にアップグレードすることを強くお勧めします。 また、多数の追加の修正と改善も行われ、サポート チケットを発行する必要があるときに NGINX がサポートしやすくなります。

アップグレードを進める前に、このブログ投稿に記載されている新機能動作の変更をよく確認してください。

NGINX Plus をまだお試しいただいていない方は、セキュリティ、負荷分散、API ゲートウェイとして、または強化された監視および管理 API を備えた完全にサポートされた Web サーバーとして、ぜひお試しください。 30 日間の無料トライアルを今すぐ開始できます。 NGINX Plus がアプリケーションの配信と拡張にどのように役立つかを実際にご確認ください。


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