NGINX Plus Release 30 (R30)をリリースいたしました。NGINX Plusは、NGINXオープンソースをベースにした、唯一のオールインワン・ソフトウェアWebサーバー、ロードバランサー、リバースプロキシ、コンテンツキャッシュ、およびAPIゲートウェイです。
NGINX Plus R30の新機能は以下の通りです。
そしてこのリリースの注目は、NGINXオープンソースから継承された新機能とバグ修正、およびNGINX JavaScriptモジュールの更新です。
注: NGINX Plus R29以外のリリースからアップグレードする場合は、現在のバージョンと今回のリリースの間にあるすべてのリリースについて、以前のアナウンスブログの「動作における重要な変更点」のセクションを必ず確認してください。
listen … http2
ディレクティブの廃止listen … http2
ディレクティブはNGINX 1.25.1で非推奨となりました。nginx -t
を使用して NGINX の設定を確認すると、その旨の警告が表示されます。
nginx -t
nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in etc/nginx/nginx.conf :15
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
このディレクティブを使用しているすべてのユーザーは、NGINXをアップグレードし、サーバーごとにHTTP/2を有効にするhttp2ディレクティブを使用することを強くお勧めします。
こちらを
listen 443 ssl http2;
下記に変更してください。
listen 443 ssl;http2 on;
NGINX Plus の以前のバージョンでは、GeoIP2モジュールのビルドに Amazon Linux 2 EPELリポジトリの"libmaxminddb"ライブラリを使用していました。EPELリポジトリはこのライブラリを提供しなくなり、Amazon Linux 2ディストリビューションからもネイティブにアクセスできなくなりました。そのため、このモジュールをAmazon Linux 2用にビルドする実行可能な方法がないため、NGINX Plus R30では利用できなくなりました。
MQTT メッセージを構築するためのバッファサイズを指定するためのmqtt_rewrite_buffer_size
ディレクティブは、mqtt_buffers
ディレクティブに代わりました。新しいディレクティブでは、各バッファのサイズを指定するとともに、 コネクションごとに割り当てられるバッファの数を指定することができます。
NGINX Plus APIのバージョン番号が8から9に更新され、「ワーカーごとのコネクション状況の監視」で説明されているワーカーごとのメトリクスが追加されました。以前のバージョン番号でも動作しますが、出力にはそれ以降のAPIバージョンで追加されたメトリクスは含まれません。
新たに以下のプラットフォームがサポートされます:
以下プラットフォームはサポート対象外となります。
以下プラットフォームはNGINX Plus R31でサポート対象外となる予定です。
HTTP/3 over QUICは、多くの企業のお客様から待ち望まれていた機能であり、NGINX Plus R30で正式に導入することになりました。これは新しい技術の実装であり、今後のリリースでも引き続き注力していきます。NGINX Plusをご利用のお客様には、まずテスト環境などでお試しいただき、どのようなフィードバックでもご共有ください。
NGINX Plusは、セキュアな通信と暗号化機能をOpenSSLに依存しており、オペレーティングシステムに同梱されているSSL/TLSライブラリを利用しています。しかし、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 {
# for better compatibility it's recommended
# to use the same port for quic and https
listen 8443 quic reuseport;
listen 8443 ssl;
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
location / {
# required for browsers to direct them into quic port
add_header Alt-Svc 'h3=":8443"; ma=86400';
}
}
}
NGINX Plus R29で導入されたテスト段階でのHTTP/3サポートとは異なり、NGINX Plus R30のQUIC+HTTP/3サポートは単一のバイナリで利用できます。この改善により、環境への機能導入が容易になります。
注:NGINX Plus R30では、スタンドアロンQUICバイナリのサポートとアップデートを終了し、今年後半にはダウンロードオプションとして削除する予定です。
NGINX Plusのユーザーは、worker_connections
ディレクティブを適切に調整するために、ワーカープロセスごとのコネクションの合計を監視できるようになりました。この改善により、ワーカー間でどのようにコネクションが分散されているかをよりよく把握できるようになりました。ワーカーごとのコネクションを調整できるようになったことで、NGINXのデプロイメントをより適切に評価できるようになりました。
ワーカーごとのコネクションメトリクスは REST API で利用できます。ワーカーごとの接続メトリクスを取得するには、…/api/9/workers
エンドポイントを使用します。
ワーカーごとのコネクションメトリクスを取得するには、.../api/9/workers/<worker id>
エンドポイントを使います。worker id
は0から始まるインデックスです。
レスポンスの例を下記に示します。
{
{
"id": 0,
"pid": 2346,
"connections": {
"accepted": 1,
"dropped": 0,
"active": 1,
"idle": 0
},
"http": {
"requests": {
"total": 15,
"current": 1
}
}
},
{
"id": 1,
"pid": 1234,
"connections": {
"accepted": 3,
"dropped": 0,
"active": 1,
"idle": 0
},
"http": {
"requests": {
"total": 15,
"current": 1
}
}
},
...
}
以下に示すように、NGINX Plusのライブアクティビティ監視ダッシュボードでは、ワーカーごとのコネクションメトリクスを確認できます。demo.nginx.comでこの機能のライブデモにアクセスしてみてください。
ダッシュボードには、NGINX Plusのコネクションとリクエストに関する以下の情報が表示されます。
コネクション数:
リクエスト数
問題解決のための所要時間を短縮するために、診断パッケージは NGINX 環境の問題のトラブルシューティングに必要なデータの収集プロセスを合理化します。また、診断パッケージは、問題のトラブルシューティングに必要な情報を手動で要求および収集することに関連する不一致や遅延を回避し、NGINX Plusのお客様とF5サポート間のやり取りをより効率的にします。
診断パッケージは以下の情報を収集します。
ps
, lsof
, vmstat
など)systemd
など診断パッケージを追加する目的は、パッケージ内のスクリプトがどのようなコマンドを実行し、どのようなデータが収集されるかをユーザーに透過的に示すことです。NGINX Plus診断パッケージのページを参照してください(リンクは近日公開予定です。)
注: 診断パッケージの利用可能性は、現在のNGINX Plus R30リリースの一部として発表されていますが、診断パッケージは実際にはリリースに依存しません。今後、トラブルシューティングのデータ収集プロセスを改善する目的で、お客様およびF5サポートからのフィードバックに基づいて更新する予定です。
メッセージ・キューイング・テレメトリ・トランスポート(MQTT)フィルター・モジュールのメモリ消費量の改善により、スループットが4~5倍向上しました。
ディレクティブmqtt_rewrite_buffer_size
が削除されました。その代わりに、新しいディレクティブmqtt_buffers <num> <size>
が導入され、モジュールが接続ごとに割り当てるバッファの数と、それぞれのバッファのサイズが指定できるようになりました。デフォルトのバッファ数は100で、各バッファのデフォルトのサイズは1024バイトです。
NGINX Plusは、リロード時に動的に解決されたアップストリームホストのDNS名の有効期限を保持するようになり、設定のリロード時に再解決の必要性がなくなりました。この更新前は、すべてのアップストリームに対して DNS 名前解決がトリガされました。この更新により、NGINXはすべてのアップストリームのDNS名前解決と有効期限を保持し、リロード時に新規または変更されたアップストリームに対してのみDNS名前解決をトリガします。
この最適化は、多数のアップストリームホストを含むNGINX環境で最も効果を発揮します。NGINXの構成に100以上のアップストリームホストがある場合、最適化が最も顕著になります。
NGINX Plus R30はNGINXオープンソース1.25.1をベースとしており、NGINX Plus R29のリリース以降(NGINX 1.25.0および1.25.1)に行われた機能変更、機能、バグ修正を継承しています。
server_push
は最小限の採用しかなく、非常に限られたユースケースでしか使用できませんでした。(IETF 102 reference documentation によると、セッションのわずか 0.04% で使用されていました。RFC 913 によると、「効果的に使用することは困難」でした)。HTTP/2サーバープッシュは、Chromeバージョン106で無効になりました。この変更に伴い、http2_push
、http2_push_preload
、http2_max_concurrent_pushes
ディレクティブは廃止されました。ssl
ディレクティブはサポートされなくなりました。ssl
ディレクティブは NGINX 1.15.0 で非推奨となり、 listen ディレクティブのssl
パラメータで置き換えられました。非推奨の ssl ディレクティブは削除されました。listen … http2
ディレクティブは非推奨です。代わりにhttp2
ディレクティブを使うことを推奨します。listen port_num http2
) を設定した場合、HTTP/2 コネクションしか作成できません。h2リスニングソケットはHTTP/1.1とHTTP/2の両方をサポートし、ALPNによるプロトコルのネゴシエーションを行います。しかし、既存の実装では、HTTP/1.1クライアントはソケット上で失敗し、HTTP Upgradeをプロトコルのネゴシエーションの手段として使うことができません。この変更により、HTTP/2 を使用する場合、プレーン TCP ソケット上で HTTP/1.1 と HTTP/2 を同時にサポートすることができます。$sent_http_*
で起こりうるバッファオーバーランの回避が有効になりました。マルチヘッダの $sent_http_ 変数を評価するロジックに欠陥があり、特定の要素がクリアされてもリンクリストに残っていると、バッファオーバーランの可能性がありました。この問題は、サードパーティモジュールを使用してマルチヘッダ値を上書きした場合に発生しました。今回の更新では、洗練された境界チェックが導入され、これらの変数のより安全な処理と評価が保証されるようになりました。quic_mtu
ディレクティブの削除http3 parameter of listen
の削除segfault
を修正。最近のリリースから継承された新しい変更、機能、バグ修正、および回避策の全リストについては、NGINX CHANGESファイルを参照してください。
NGINX Plus R30には、NGINX JavaScript(njs)モジュールバージョン0.8.0からの変更が組み込まれています。
ngx.build、ngx.conf_file_path、ngx.error_log_path、ngx.prefix、ngx.version、ngx.version_number
、ngx.worker_id
。
js_shared_dict_zone
ディレクティブを導入し、ワーカープロセス間で共有される辞書を宣言できるようにした。r.requestBody()
を http モジュールから削除しました。代わりにr.requestBuffer
またはr.requestText
プロパティを使用する必要があります。r.responseBody()
を http モジュールから削除しました。代わりにr.responseBuffer
またはr.responseText
プロパティを使用する必要があります。http
モジュールでフィルタリング中にr.internalRedirect()
で例外がスローされます。retval
引数で提供されます。この変更は、コードの修正を必要とするnjsのC拡張との互換性を破壊します。String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(encoding)
http
モジュールでフィルタリングを行う際のr.status
セッターを修正しました。http
モジュールでLocation
ヘッダの設定を修正しました。сrypto.getRandomValues()
のretvalを修正しました。Date.parse()
を修正しました。すべての機能、変更、およびバグ修正の包括的なリストについては、njs Changes logを参照してください。
NGINX Plusを実行している場合は、できるだけ早くNGINX Plus R30にアップグレードすることを強くお勧めします。素晴らしい新機能に加え、いくつかの修正や改善も追加されます。また、最新版であることは、サポートチケットを発行する必要がある場合にNGINXがお客様をサポートするのに役立ちます。
NGINX Plusをまだお試しでない方は、ぜひチェックしてみてください。セキュリティ、ロードバランシング、APIゲートウェイのユースケースとして、または強化されたモニタリングと管理APIを備えた完全にサポートされたWebサーバーとして使用できます。30日間の無料トライアルをご利用ください。
"This blog post may reference products that are no longer available and/or no longer supported. For the most current information about available F5 NGINX products and solutions, explore our NGINX product family. NGINX is now part of F5. All previous NGINX.com links will redirect to similar NGINX content on F5.com."