NGINXは、NGINX Plusロードバランサー用のコントロールプレーンソリューションであるNGINX Controller Application Delivery Moduleの新しいバージョンをリリースした。新機能には、強化されたワークロードヘルスチェック、キャッシュ構成の改善、インスタンスグループが含まれる。
NGINX Controllerは、NGINX Plusインスタンスのフリートを管理するための集中型のオーケストレーションおよび分析プラットフォームを提供する。NGINX Plusは、統合されたロードバランサー、サーバ、コンテンツキャッシュである。Application Delivery Moduleは、NGINX Plusインスタンス用のコントロールプレーンソリューションを提供する。これにより、アプリケーションの負荷分散を構成、保護、監視、トラブルシューティングするためのインターフェイスが提供される。
この新しいバージョンで、NGINXはワークロードヘルスチェックを強化した。インスタンスごとコンポーネントごとに2つの新しいイベントが生成されるようになった。1つ目は、ワークロードグループのメンバーが状態を正常から異常に変更したときにトリガーされるイベントである。2つ目は、ワークロードグループメンバーの現在の状態のスナップショットを提供するイベントで、数分ごとに送信される。これらの2つの新しいイベントに加えて、NGINX Plusデータプレーンによって送信されるヘルスチェックプローブのヘッダーを構成できるようになった。
このリリースには、スニペットと呼ばれる新機能も含まれる。これにより、コントローラーAPI内で表されないNGINXディレクティブを構成できるようになる。スニペットは、http
、main
、stream
、upstream
ブロックに追加できる。そして、コンポーネントserver
ブロックおよびlocation
ブロック、ゲートウェイのserver
ブロックに追加できる。たとえば、スニペットを使用して、HTTP Strict Transport Security (HSTS)ポリシーを次のように実装できる。
{
"metadata": {
"name": "<gateway-name>"
},
"desiredState": {
"configSnippets": {
"uriSnippets": [
{
"applicableUris": [
{
"uri": "http://172.16.0.238:81"
}
],
"directives": [
{
"directive": "add_header",
"args": ["Strict-Transport-Security", "max-age=31536000; includeSubDomains", "always"]
}
]
}
]
},
"ingress": {
"uris": {
"http://example.com:8020": {}
},
"placement": {
"instanceRefs": [
{
"ref": "/infrastructure/locations/unspecified/instances/<instance-name>"
}
]
}
}
}
}
スニペットはそのままnginx.conf
ファイルに適用されることに注意してください。スニペットが適用される前にNGINXコントローラーによって行われる検証ステップはない。そのため、NGINXは、本番環境にプッシュする前に、検証環境でスニペットを検証することを強くお勧めする。
キャッシュは、APIあるいはUIを介して設定できるようになった。ディスクストアをコンポーネントに追加することで、基本的なキャッシュを有効にできる。指定されたディレクトリが存在する必要があり、NGINXプロセスにはそのディレクトリに対する読み取りと書き込みの両方の権限が必要であることに注意してください。単一のディスクストアでは、NGINXコントローラーは最上位のhttp
コンテキストにproxy_cache_path
を追加し、コンポーネントのlocation
ブロックにproxy_cache
を追加することにより、nginx.conf
ファイルを変更する。
キャッシュ分割は、分割構成設定でサポートされる。これにより、キャッシュされたコンテンツをパーセンテージまたはパターンマッチングで分割できる。NGINXコントローラーは、生成されたnginx.conf
ファイルのhttp
コンテキストに、パーセンテージ分割を含むsplit_clients
構成ブロック、または文字列を含むmap
構成ブロック(パターンマッチング用)を追加する。
スニペットを使用すると、高度なキャッシュが利用できる。次の例では、configSnippets.uriSnippets
APIを使って、すべてのリクエストのキャッシュ期間を1分に設定している。さらに、これにより、デフォルトの保存場所として/tmp/default
を使って、3つのストレージパスにまたがるキャッシュ分割がセットアップされる。
{
"desiredState": {
"configSnippets": {
"uriSnippets": [
{
"directives": [
{
"directive": "proxy_cache_valid",
"args": [
"any",
"1m"
]
}
]
}
]
},
"caching": {
"splitConfig": {
"criteriaType": "PERCENTAGE",
"key": "$request_uri"
},
"diskStores": [
{
"inMemoryStoreSize": "100m",
"inactiveTime": "1m",
"isDefault": false,
"maxSize": "5G",
"minFree": "10k",
"path": "/tmp/hdd1",
"percentCriteria": "20%"
},
{
"inMemoryStoreSize": "100m",
"inactiveTime": "10s",
"isDefault": false,
"maxSize": "5g",
"minFree": "10k",
"path": "/tmp/hdd2",
"percentCriteria": "50%"
},
{
"inMemoryStoreSize": "100m",
"inactiveTime": "15s",
"isDefault": true,
"maxSize": "2g",
"minFree": "10k",
"path": "/tmp/default"
}
]
}
}
}
新しくリリースされたインスタンスグループによって、同じ設定を受け付けるNGINX Plusインスタンスの論理グループを作成できる。これにより、1つのステップで複数のインスタンスを大規模に構成できる。
このリリースに含まれる詳細と追加機能については、NGINXブログの公式発表を確認してください。NGINXコントローラーアプリケーション配信モジュールは、NGINXコントローラーの一部として試用できる。