NGINX Plus リリース 21 (R21)が利用可能になったことをお知らせします。 NGINX オープンソースをベースにした NGINX Plus は、唯一のオールインワンロード バランサー、コンテンツ キャッシュ、Web サーバー、API ゲートウェイです。 4 億 5,000 万を超える Web サイトが NGINX に依存しており、 NGINX Plus R21 は、主に NGINX Open Source のバグ修正と安定性の向上に重点を置いており、これまで以上に信頼性とセキュリティが向上しています。
NGINX Plus R21の新機能は次のとおりです。
ホスト
ヘッダーを持つクライアント リクエストを許可しなくなりました。効率的なソフトウェアとコード品質は、オープンソースと NGINX Plus の両方において、NGINX を構築する際の中心的な信条です。
NGINX チームは、あらゆる商用ソフトウェアに期待される最新の CI/CD および自動テスト ツールをすべて採用しています。 毎日のテスト アクティブ開発ブランチの「欠陥密度」は、コード 1000 行あたりわずか 0.01 個と、同様のサイズのコードベースの平均密度である 1000 行あたり 0.7 個の欠陥と比較して、非常に低い値を示しています。
また、オープンソースと NGINX Plus コンポーネントの両方に対して、外部の独立した侵入テストとコードレビューを委託しています。 最新の侵入テストとコードレビューにより、このリリースで対処されているいくつかの問題が特定されました。
合計で、 NGINX Plus R21には 14 個のバグの修正が含まれています。
aio
ディレクティブでサブリクエストを使用するとソケット リークが発生する494
代わりに返されました400
コードにエラーがある場合494
error_page
ディレクティブでリダイレクトされた書き換え
ディレクティブが含まれている場合、開始時または再構成中にセグメンテーション違反が発生する可能性がある。break
ディレクティブがalias
ディレクティブと組み合わせて使用されたり、URIを指定したproxy_pass
ディレクティブと組み合わせて使用されたりすると、ワーカープロセスでセグメンテーション違反が発生する場合があります。Transfer-Encoding
リクエスト ヘッダーのみが処理されましたLocation
レスポンスヘッダー行にゴミが含まれる可能性があります。error_page
ディレクティブを使用してリダイレクトを返すときに、本文を含むリクエストが誤って処理されました。debug_points
ディレクティブのバグこれらのバグはいずれも重大なものではなく、関連する CVE レコードも存在しないことに注意してください。
このリリースの時点で、私たちは 2020 年のロードマップに懸命に取り組んでいます。 今年後半には、 HTTP/3 (別名 QUIC) の製品版実装が利用可能になる予定です。 このテクノロジーをフォローしたりテストしたりすることに興味がある場合は、今後数週間以内に公開される実験的なパッチに注目してください。
NGINX Plus R15 では、アップストリーム グループへの gRPC トラフィックのルーティングと負荷分散のサポートが導入されました。 grpc_pass
ディレクティブを含めることで、NGINX Plus を活用して gRPC トラフィックをルーティングできます。
NGINX Plus R21 では、 grpc_pass
ディレクティブに変数サポートが導入され、gRPC ワークロードに拡張される動的な API 駆動型ルーティング ポリシーが提供されます。 これにより、次のようなユースケースに対応できるようになります。
次の構成は、デバッグ ルーティングのサンプル実装です。
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 モジュール (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 R21にアップグレードすることを強くお勧めします。 また、多数の追加の修正と改善も行われ、サポート チケットを発行する必要があるときに NGINX がサポートしやすくなります。
アップグレードを進める前に、このブログ投稿に記載されている新機能と動作の変更をよく確認してください。
NGINX Plus をまだお試しいただいていない方は、セキュリティ、負荷分散、API ゲートウェイとして、または強化された監視および管理 API を備えた完全にサポートされた Web サーバーとして、ぜひお試しください。 30 日間の無料トライアルを今すぐ開始できます。 NGINX Plus がアプリケーションの配信と拡張にどのように役立つかを実際にご確認ください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"