NGINXは、同社のオープンソースのWebアプリケーションサーバNGINX Unitのバージョン1.13と1.14をリリースしたことを発表した。これらのリリースにはリバースプロキシと、接続したクライアントのIPアドレスと要求のターゲットアドレスに基いた、アドレスベースのルーティングのサポートが含まれている。
NGINX Unitは、複数の言語バージョンのWebアプリケーションを同時に実行することができる。サポート対象の言語はGo、Perl、PHP、Python、Node.js、Rubyなどである。静的なコンフィギュレーションファイルは使わず、JSONを使用してREST API経由で設定を行う。設定された内容はメモリに保存され、再起動せずに更新することができる。
最新リリースではリバースプロキシのサポートが追加された。リバースプロキシはWebサーバの前に配置されて、クライアントの要求をサーバに転送する。汎用ルーティングフレームワークにはproxy
オプションが追加され、指定アドレスに要求をプロキシすることが可能になった。現時点では、プロキシアドレスの設定としてIPv4、IPv6、Unixソケットアドレスがサポートされている。
例えば以下のroutes
オブジェクトは、到着した要求が"match"の条件に一致した場合、その要求を127.0.0.1:8000
にプロキシする。
{
"routes": [
{
"match": {
"host": "v1.example.com"
},
"action": {
"proxy": "http://127.0.0.1:8000"
}
}
]
}
proxy
オプションは、以前に追加されたpass
およびshare
アクションと合わせて、トラフィックのルーティング方法を決定する。バージョン1.8.0で追加されたpass
オプションでは、要求をアプリケーションまたはルートへ渡すことによるトラフィックの内部ルーティングが可能になる。内部ルーティングは、例えば不正な要求によるメインのアプリケーションへの影響を最小化するために別のアプリケーションへ転送して処理する、というように、特定の要求を別のアプリケーションで処理したい場合に有効である。
バージョン1.11.0で導入されたshare
アクションでは、静的ファイルの共有が可能になる。URI内にエンコードされたシンボルや多数の組込みMiMEタイプなどがサポートされる他、新たなタイプを追加することも可能である。
アドレスベースのルーティングは1.14リリースで導入されたもので、source
とdestination
という、新しいマッチオプションに対するアドレスのマッチングが可能になった。source
オプションは接続したクライアントのIPアドレスに基くマッチングが可能であり、destination
オプションは要求のターゲットアドレスにマッチする。
さらに今回のリリースでは、IPv4およびIPv6ベースのパターン、およびパターンの配列とのアドレス値のマッチが可能になった。パターンにはポート番号を指定したワイルドカード、固定アドレス、CIDR表記を使用することができる。以下の例では、CIDR表記にマッチするソースアドレスを持つ要求に対して、共有パス内のリソースへのアクセスが提供される。
{
"routes": [
{
"match": {
"source": [
"10.0.0.0/8",
"10.0.0.0/7:1000",
"10.0.0.0/32:8080-8090"
]
},
"action": {
"share": "/www/data/static/"
}
}
]
}
/www/data/static/
ディレクトリが次のような構造であるとすれば、
/www/data/static/
├── stylesheet.css
├── html
│ └──index.html
└── js files
└──page.js
"curl 10.0.0.168:1000/html/index.html
"という要求でindex.html
ファイルを取得することができる。
F5 NetworksのシニアテクニカルライタであるArtem Konev氏は、NGINX Unitの将来のリリースにおいて、ラウンドロビン形式のロードバランシング、アプリケーションの分離強化を目的とするrootfsのサポート、静的アセットの処理の改善、メモリパフォーマンス向上などが行われることを示唆している。
NGINX UnitはGitHubからダウンロード可能である。サポートはNGINX Plusによって提供される。リリースの変更点に関する詳細については、NGINX Unit changelogを参照して頂きたい。