NGINX Unit 11.0 リリース

投稿者: | 2019年9月20日

2019年9月19日にNGINX Unit 11.0 がリリースされました。こちらでは同バージョンの日本語参考訳と原文をご案内します。正確な内容は英文を参照してください。

このリリースでは、Goアプリケーションの安定性が向上し、3つの主要な機能が導入されています。以下に、

1.静的メディアアセットを提供する機能

この機能を使用すると、Unitをあらゆる種類のWebサービスのビルディングブロックとして機能できる本格的なWebサーバーに変換する長い道のりの始まりに過ぎません。

このリリースでは、静的ファイルのサポートは非​​常に簡単です。 Unitが処理するドキュメントルートディレクトリのみを指定できます。

 {
      "share": "/data/www/example.com"
  }

また、MIMEタイプを微調整できます。

  {
       「mime_types」:{
           「text / plain」:[
               「readme」、
               「.c」、
               「.h」
           ]、
           「application / msword」:「.doc」
       }
   }

エンコーディングを使用して、URIによって「/」文字を含む名前のオブジェクトメンバーに直接アクセスします。

 GET / config / settings / http / static / mime_types / text%2Fplain /

詳細については、ドキュメントを参照してください。

 https://unit.nginx.org/configuration/#static-files

今後のリリースでは、この機能領域を拡張して、よりパフォーマンスの高い方法でより多くのユースケースを処理します。

残念ながら、テストではより多くの作業が必要であることが明らかになったため、基本的なプロキシサポートはこのリリースに到達しませんでした。この機能が1か月ほどで次のリリースに含まれる可能性があります。

2.アプリケーションの分離

この機能により、実行中のアプリケーションのセキュリティが向上し、Linux名前空間に基づいて分離された環境で実行できるようになります。これは、Dockerコンテナーの動作に非常に似ています。

構成は非常に簡単です。分離レベルをカスタマイズし、ホストとコンテナー間のUID / GIDマッピングを構成できます。

  {
      "namespaces": {
          "credential": true,
          "pid": true,
          "network": true,
          "mount": false,
          "uname": true,
          "cgroup": false
      },

      "uidmap": [
          {
              "container": 1000,
              "host": 812,
              "size": 1
          }
      ],

      "gidmap": [
          {
              "container": 1000,
              "host": 812,
              "size": 1
          }
      ]
  }

詳細については、ドキュメントを参照してください。

 –https://unit.nginx.org/configuration/#process-isolation

この機能は、最近チームに参加したTiago de Bem Natel de Mouraによって実装されました。彼はユニットのセキュリティ機能強化とコンテナサポートに引き続き取り組みます。

3. Java Servlet ContainersのWebSocket

WebSocket接続オフロードは、Node.jsのみの以前のリリースで初めて導入されました。今ではJSCにも拡張されています。アプリケーション言語のサポートをさらに強化し、どちらの言語を選択しても同等の幅広い機会を提供します。

ユニット1.11.0での変更2019年9月19日

   *)機能:静的ファイルを提供するための基本的なサポート。

   *)機能:Linux名前空間を使用したアプリケーションプロセスの分離。

   *)機能:Javaサーブレット用の組み込みWebSocketサーバー実装コンテナ。

   *)機能:次を含むAPI構成オプションの直接アドレス指定URIエンコード(%2F)を使用して「/」をスラッシュします。

   *)バグ修正:Goアプリケーションでセグメンテーションエラーが発生した可能性があります高負荷の下で。

   *)バグ修正:ユニットがいくつかで構築されている場合、WebSocketサポートが壊れていたGNU ld以外のリンカー(ゴールドやLLDなど)。

英語原文

I’m glad to announce a new release of NGINX Unit.

This release improves the stability of Go applications and introduces
three major features:

  1. Ability to Serve Static Media Assets

With this feature, we’re only at the beginning of a long road to transform
Unit into a full-fledged web server, capable of acting as a building block
for web services of any kind.

In this release, the support for static files is very simple; you can only
specify the document root directory for Unit to handle:

  {
      "share": "/data/www/example.com"
  }

Also, you can fine-tune MIME types:

  {
       "mime_types": {
           "text/plain": [
               "readme",
               ".c",
               ".h"
           ],
      "application/msword": ".doc"
    }
  } 

Use encoding to access object members with names that contain “/” characters
directly by their URI:

GET /config/settings/http/static/mime_types/text%2Fplain/

See the documentation for details:

  • https://unit.nginx.org/configuration/#static-files

In the upcoming releases, we’ll extend this area of functionality to handle
more use cases in the most performant manner.

Unfortunately, basic proxying support did not make it to this release, as
tests have revealed that it needs more work. There are excellent chances
that the feature will be included in the next release in a month or so.

  1. Application Isolation

This capability increases the security of running applications, allowing to
run them in isolated environments based on Linux namespaces. This is very
similar to how Docker containers work.

The configuration is pretty straightforward: you can customize the isolation
level and configure UID/GID mapping between the host and the container:

  {
      "namespaces": {
          "credential": true,
          "pid": true,
          "network": true,
          "mount": false,
          "uname": true,
          "cgroup": false
      },

      "uidmap": [
          {
              "container": 1000,
              "host": 812,
              "size": 1
          }
      ],

      "gidmap": [
          {
              "container": 1000,
              "host": 812,
              "size": 1
          }
      ]
  }

See the documentation for details:

  • https://unit.nginx.org/configuration/#process-isolation

This feature was implemented by Tiago de Bem Natel de Moura, who has joined
our team recently; he will continue working on security features hardening
and container support of Unit.

  1. WebSockets in Java Servlet Containers

WebSocket connection offloading was first introduced in the previous release
for Node.js only; now it’s extended to JSC as well. We will continue
advancing application language support further to provide equally broad
opportunities, whichever language you may prefer.

Changes with Unit 1.11.0 19 Sep 2019

*) Feature: basic support for serving static files.

*) Feature: isolation of application processes with Linux namespaces.

*) Feature: built-in WebSocket server implementation for Java Servlet
Containers.

*) Feature: direct addressing of API configuration options containing
slashes “/” using URI encoding (%2F).

*) Bugfix: segmentation fault might have occurred in Go applications
under high load.

*) Bugfix: WebSocket support was broken if Unit was built with some
linkers other than GNU ld (e.g. gold or LLD).

That’s all for this release.
Try, test, leave feedback, and stay tuned!