grasys blog
grasysブログ

NGINX Plusの検証をした!

こんにちはtsunodaです。
2022年3〜4月にかけて、東京エレクトロンデバイス(TED)様、F5ネットワークスジャパン合同会社様のご協力の元、
NGINX Plus の機能検証を実施させていただきました。

どんな検証をしたのか、検証内容をご紹介させていただきます。
NGINX Plusが気になっている方のとっかかりになればと思います。

NGINX Plus とは

NGINX Plusとは?
NGINX Plusは、オープンソース版のNGINXに様々な機能を拡張し搭載した商用版ソフトウェアです。
オープンソース版のNGINXに基づいて開発されたAPIゲートウェイ、コンテンツキャッシュ、ロードバランサ、Webアプリケーションファイアウォール(WAF)、リバースプロキシといった、独自のエンタープライズ向け機能をオールインワンで利用できる商用版のソリューションとなっています。

NGINX Plusはオープンソース版の機能に加え、アクティブヘルスチェック、セッションの維持、JWT認証、APIによる構成等の機能も備えており、これらの機能を活用することにより、システムの可用性を向上させ、運用を簡素化できます。

また、NGINX Plusには機能だけではなくメーカーのサポートがついていますので、導入支援や技術QAに加え、脆弱性に対応するパッチなども提供されますので、クリティカルなシステムでも安心して使用する事ができます。

詳しくはTED様のブログで紹介しているのでご参照ください。
NGINX Plusを選択するポイントとは

今回弊社で検証したものはざっと分けると以下です。

ロードバランサ機能
コンテンツキャッシュ&kvs
メトリクス収集、監視
セキュリティ制御
Kubernetasイングレスコントローラー
サービスメッシュ
NGINXコントローラ
Nginx Instance Manager

NGINX Plusの機能ではないものの、気になったので検証した項目もあります。
OSS版とNGINX Plusの機能比較

ロードバランサ機能

ロードバランサ
HTTP/TCP/UDPサポート、L7ルーティング、アクティブヘルスチェックなどなど機能として充実しています。
backendサーバの優先度も設定できて冗長化も可能、Cookieを持たせたセッション維持も可能です。
アクティブヘルスチェックはソースサーバを監視するために使用できます。

クラウドの場合、そのクラウドベンダーが提供しているロードバランササービスを利用することになります。
NGINXのロードバランサを使うパターンを考えると、やはりマルチクラウドやクラウド+オンプレ構成になってしまうかなー。
ただその場合、L7ルーティング、アクティブヘルスチェック、セッション維持の機能は有用です。
公式ではこういう構成がサンプルとしてあります→ NGINX Plus on the Google Cloud Platform

コンテンツキャッシュ&kvs

コンテンツキャッシュ & kvs
静的・動的コンテンツどちらもキャッシュ保持可能です。
fastcgi_cache_pathの設定でpurgerパラメータを入れることで保持期間の調整も可能です。
wordpressを使用しているなら、Nginx Proxy Cache Purgeというプラグインがあるのでその使用がおすすめです。

rsyncのような役割をはたすsyncオプション機能があり、別サーバとkvsの同期も可能です。
弊社はcronでrsyncを設定して同期していたりするのですが、使いようによってはNGINXの機能でカバーできちゃいます。
メモリ制限もできるのでkvsでメモリが溢れることも無し。
kvsにIPを入れて、そのIPのアクセスを特定のパスでは拒否みたいなこともできて面白いです。

メトリクス収集、監視

モニタリング
ロードバランサ、cacheを利用している場合は有用だと感じました。
システムのメトリクスも収集することが可能ですが、他のメトリクスと同じダッシュボードで確認したいので使い所が難しいと感じました。
弊社だとphp-fpmと同居されることが多いのでNGINX、php-fpm、システムのメトリクスが同じダッシュボードで参照できる方が良かったです。
ただ収集できるNGINXメトリクスの種類は多し!

セキュリティ制御

waf(App Protect)
ロードバランサはクラウドベンダーが提供するものを利用することを前提とすると、各VM上で稼働するNGINXに導入することになります。
使い勝手としては、jsonで定義するのでそこまで難しくないです。
NGINX Ingress Controller + App ProtectでもL7のルーティングごとに設定ができるのでこのパターンでも使い勝手は良さそう。
wafはクラウド上の例えばGoogle CloudのCloud Armorや、AWSのWAFと機能は似ていますが、やはり反映時間は早いです。

Kubernetesイングレスコントローラー

Kubernetesイングレスコントローラー
トラフィック管理ソリューションというやつです。
KubernetesイングレスコントローラーとGKEのIngressと比較した場合、namespaceを跨いでL7ルーティングできるのでnamespace毎にアプリケーションを分けたい場合は有用だと感じました。
Google Cloudに限っていうとHTTP LBを利用するとnamespaceは跨げないが、NGINX Ingressよりネットワークのホップが少なくなるのでそのあたりはトレードオフになりそうです。
Kubernetes イングレスコントローラー自体は無償でも利用できますが、有償であるApp Protectと併用することでL7ルーティング毎に異なるwafの設定ができるのでそのような使い方が有用です。

サービスメッシュ

サービスメッシュ
サービスメッシュ自体はNGINX Plusの機能ではありませんが、気になったので検証してみました。
コンテナトラフィック管理に向けた安全なサービス管理ソリューションを提供します。
helm、nginx-meshctlでのインストールは容易でした。
使い方としてはistioとほぼ同じです。server mesh、サーキットブレイカー、mTLSなどなど。
GKEで利用した場合、ingress(HTTPS LB) + service + TrafficSplit での分散も可能です。
GCPのHTTP(S) LBを利用しつつ、TrafficSplitでカナリヤ、B/G デプロイも可能です。

実は無料で使えますが、サイドカーとしてデプロイされるproxyにNginx PlusがOSSではありません。
サポートを利用する場合はNginx Server Mesh用の契約が必要です。

NGINXコントローラ

NGINXコントローラ
さまざまなメトリクスの収集が可能。
パフォーマンスやコストの改善へと繋げられます。
構築はそこまで難しくなかったです。
UI的にも直感的でみやすい印象です。
現在はKubernetes上への構築ができないようなのでKubernetes上でも稼働できると運用が楽になりそう。

Nginx Instance Manager

Nginx Instance Manager
こちらは有償の製品となっており、NGINX Plusとは別の製品です。
NGINXコントローラでは、コントローラ上で管理しているサーバのconfigを変更した場合、confファイルが自動的に書き変わるパターンがあります。
なのでNginx Instance Managerの検証もしてみました。

Nginx Instance Managerは分散したNGINXインスタンスを一元管理できます。
グループを作成し、そこにインスタンスを入れてグループとして管理することも可能。
confをNginx Instance Manager内で更新し、管理しているインスタンス全てに反映することも可能。
confの更新時にはconfigチェックもしてくれて、インスタンスへpublishした際にはreloadまでしてくれます。

開発担当者主導でconfigをGUI上から設定、セキュリティ的にsshさせたくない場合などには有用だと思いました。
templateとしてconfの履歴は残りますが、前回の設定との差分がわからないのでわかるようになるといいです。できればconfig適用前に差分がわかりたい。

まとめ

ざざっとご紹介しましたが、他にもレート制限ができたり、slow startかけられたりなど様々な機能があります。
弊社はクラウドを使用しているので、使いどころを考えてしまう機能もありました。
ただサービスメッシュはGKEで使用できそうですし、マルチクラウドやオンプレ環境で有用である機能もあり、うまく組み合わせられる場面はありますね。
そしてNGINXのドキュメントは結構充実しているイメージがあります。
具体的にconfの書き方も載っているし、調べればたくさんの方が設定方法や解消方法を上げているので理解はしやすいツールかと思います。
NGINXクックブックって知ってますか?無料でダウンロードできるんだぜうへへ

私は過去にNGINXのrewrite設定の魔術にかかり異世界へ飛んだことがあります。。
ですが今回はTED様、F5様のご協力のおかげで彷徨うこともなく大変貴重な検証ができました!w
TED様、F5様、このような機会をいただきましてありがとうございます。
無料トライアルもできますので気になっている方は是非お試しを☆
そしてさらに、後日もっと詳しい検証内容を載せたブログが弊社とTED様のブログからも出る予定ですので乞うご期待!


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。