最終更新日:2021/11/10 原本2018

NGINX Unit

設定

デフォルトでは、Unit APIがコントロール ソケット ファイル control.unit.sock の中で利用可能です。

アプリケーション

各アプリケーションのために、Unit設定のapplicationsのセクション内のJSONオブジェクトを呈するためにAPIを使います。JSONオブジェクトは、書かれている言語、実行するアプリケーションワーカープロセスの数、アプリケーションのためのファイルを持つディレクトリ、および言語によって変わるパラメータを含む、アプリケーションの幾つかの特徴を定義します。

この例は/www/blogs/scripts内で見つかるファイルを使ってblogsという名前のPHPアプリケーションの20プロセスを実行します。URLがPHPファイルを指定しない場合のデフォルトの起動ファイルは index.phpです。

{
    "blogs": {
        "type": "php",
        "processes": 20,
        "root": "/www/blogs/scripts",
        "index": "index.php"
    }
}

リスナー

HTTPを経由してアクセス可能なアプリケーションについて、Unit設定のlisteners セクションの中でそれのための少なくとも1つのlistenerを定義する必要があります。listener は名前付きのアプリケーションへのクライアントのリクエストのためのUnit listenerのIPアドレスとポートです。IP アドレスは完全アドレス(例えば127.0.0.1:8300) あるいはワイルドカード (例えば *:8300)です。

この例では、ポート 8300 で受け取られるリクエストは blogs アプリケーションに送られます:

{
    "*:8300": {
        "application": "blogs"
    }
}

各言語のJSONオブジェクトについての詳細は、アプリケーション オブジェクトを見てください。

最小構成

アプリケーションを実行するには、この例のように少なくとも1つのlistenerと関係するアプリケーションを含まなければなりません:

{
    "listeners": {
        "*:8300": {
            "application": "blogs"
        }
    },

    "applications": {
        "blogs": {
            "type": "php",
            "processes": 20,
            "root": "/www/blogs/scripts",
            "index": "index.php"
        }
    }
}

設定オブジェクトの生成

オブジェクトを設定するには、PUT リクエストのボディ内でJSONのデータを指定します。エラーを減らすために、ファイル内にJSONデータを書き、curl コマンドの -d オプションを使ってファイルパスを指定するのが合理的です。

例: 完全な設定の作成

start.json ファイルの内容をアップロードすることで初期設定を生成します。

# curl -X PUT -d @/path/to/start.json  \
       --unix-socket /path/to/control.unit.sock http://localhost/

例: アプリケーション オブジェクトの生成

ファイル wiki.jsonからwiki と呼ばれる新しいアプリケーションオブジェクトを生成します:

# curl -X PUT -d @/path/to/wiki.json  \
       --unix-socket /path/to/control.unit.sock http://localhost/applications/wiki

wiki.json の内容は以下のとおりです:

{
    "type": "python",
    "processes": 10,
    "module": "wsgi",
    "user": "www-wiki",
    "group": "www-wiki",
    "path": "/www/wiki"
}

設定オブジェクトの表示

設定オブジェクトを表示するには、そのパスをcurl URL に追加します。

例: 完全な設定の表示

完全な設定を表示します:

# curl --unix-socket /path/to/control.unit.sock http://localhost/
{
    "listeners": {
        "*:8300": {
            "application": "blogs"
        }
    },

    "applications": {
        "blogs": {
            "type": "php",
            "user": "nobody",
            "group": "nobody",
            "root": "/www/blogs/scripts",
            "index": "index.php"
        }
    }
}

例: オブジェクトの表示

wiki アプリケーションについてのデータを表示します:

# curl --unix-socket /path/to/control.unit.sock http://localhost/applications/wiki
{
    "type": "python",
    "processes": 10,
    "module": "wsgi",
    "user": "www",
    "group": "www",
    "path": "/www/wiki"
}

設定オブジェクトの修正

設定オブジェクトを変更するには、PUT リクエストのボディ内にオブジェクトのJSONデータを指定するために、curlコマンドに -d オプションを使います。

例: listenerのためのアプリケーションの変更

*:8400上のlistenerについて、application オブジェクトを wiki-dev に変更します:

# curl -X PUT -d '"wiki-dev"' --unix-socket /path/to/control.unit.sock  \
       'http://localhost/listeners/*:8400/application'
{
    "success": "Reconfiguration done."
}

例: アプリケーションのためのファイルパスの変更

blogs アプリケーションについての rootオブジェクトを /www/blogs-dev/scriptsに変更します:

# curl -X PUT -d '"/www/blogs-dev/scripts"'  \
       --unix-socket /path/to/control.unit.sock  \
       http://localhost/applications/blogs/root
{
    "success": "Reconfiguration done."
}

設定オブジェクトの削除

設定オブジェクトを削除するために、DELETE リクエストを作成し、オブジェクトのパスを curl URL に追加します。

例: listenerの削除

*:8400上のlistenerを削除します:

# curl -X DELETE --unix-socket /path/to/control.unit.sock  \
       'http://localhost/listeners/*:8400'
{
    "success": "Reconfiguration done."
}

リスナー オブジェクト

オブジェクト 説明
アプリケーション アプリケーション名。

例:

{
    "application": "blogs"
}

アプリケーション オブジェクト

各アプリケーション オブジェクトは型に関係なくアプリケーションについて指定することができる多くの共通オプションを持ちます。

共通のオプションは以下の通りです:

オブジェクト 説明
種類 アプリケーションの型: go, perl, php, python あるいは ruby.
processes (任意) アプリケーション プロセスの数。デフォルトでは 1つのプロセスが使われます。
working_directory (任意) アプリケーションのための作業ディレクトリ。指定されない場合は、Unitデーモンの作業ディレクトリが使われます。
user (任意) アプリケーションプロセスを実行するユーザ名。指定されない場合、nobody が使われます。
group (任意) アプリケーションプロセスを実行するグループ名。指定されない場合、ユーザのプライマリ グループが使われます。

アプリケーションのに応じて、多くの追加のオプションを設定する必要があります。

Go アプリケーション

オブジェクト 説明
実行ファイル コンパイルされたアプリケーションへのパス。working_directoryへの絶対あるいは相対。

例:

{
    "type": "go",
    "working_directory": "/www/chat",
    "executable": "bin/chat_app",
    "user": "www-go",
    "group": "www-go"
}

Perl アプリケーション

オブジェクト 説明
script PSGI スクリプト パス。

例:

{
    "type": "perl",
    "script": "/www/bugtracker/app.psgi",
    "working_directory": "/www/bugtracker",
    "processes": 10,
    "user": "www",
    "group": "www"
}

PHP アプリケーション

オブジェクト 説明
root PHPファイルを探すディレクトリ。
見出し URL内でPHPファイル名が指定されない場合のデフォルトの起動ファイル。
script (任意) ファイルシステム内でファイルを探す代わりにUnitが各URLについて実行するファイル。場所はrootへの相対です。

例:

{
    "type": "php",
    "processes": 20,
    "root": "/www/blogs/scripts",
    "index": "index.php",
    "user": "www-blogs",
    "group": "www-blogs"
}

Python アプリケーション

オブジェクト 説明
module WSGI モジュール名。
path (任意) WSGIモジュール ファイルを探すためのパス。

例:

{
    "type": "python",
    "processes": 10,
    "path": "/www/store/cart",
    "module": "wsgi",
    "user": "www",
    "group": "www"
}

Ruby アプリケーション

オブジェクト 説明
script Rack スクリプト パス。

例:

{
    "type": "ruby",
    "processes": 5,
    "user": "www",
    "group": "www",
    "script": "/www/cms/config.ru"
}

完全な例

{
    "listeners": {
        "*:8300": {
            "application": "blogs"
        },

        "*:8400": {
            "application": "wiki"
        },

        "*:8500": {
            "application": "go_chat_app"
        },

        "127.0.0.1:8600": {
            "application": "bugtracker"
        },

        "127.0.0.1:8601": {
            "application": "cms"
        }
    },

    "applications": {
        "blogs": {
            "type": "php",
            "processes": 20,
            "root": "/www/blogs/scripts",
            "user": "www-blogs",
            "group": "www-blogs",
            "index": "index.php"
        },

        "wiki": {
            "type": "python",
            "processes": 10,
            "user": "www-wiki",
            "group": "www-wiki",
            "path": "/www/wiki",
            "module": "wsgi"
        },

        "go_chat_app": {
            "type": "go",
            "user": "www-chat",
            "group": "www-chat",
            "working_directory": "/www/chat",
            "executable": "bin/chat_app"
        },

        "bugtracker": {
            "type": "perl",
            "processes": 3,
            "user": "www",
            "group": "www",
            "working_directory": "/www/bugtracker",
            "script": "app.psgi"
        },

        "cms": {
            "type": "ruby",
            "processes": 5,
            "user": "www",
            "group": "www",
            "script": "/www/cms/config.ru"
        }
    }
}
TOP