nginxをリバースプロキシ化して、nginx unitを呼び出す

やっとわかってきたぞ。

$ cd /etc/nginx/
$ sudo vi nginx.conf

で、設定ファイルの内容を変更する。
念のためにnginx.confのバックアップを取っておくことを超お勧めする。

全文は次の通り。
色の変わっているところが変更部分だ。
とりあえずの設定だから、80ポートにアクセスするとwsgiファイルが反応する。
他のhtmlファイル等は反応できないので、それは別途調整が必要。

=== 以下、nginx.confファイルの内容===
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream unit_backend {
        server 127.0.0.1:8400;
        }



    server {
        listen       80;

        server_name  localhost;

        location / {
           proxy_pass http://unit_backend;
           proxy_set_header Host $host;


        }

    }

}

wsgiファイルをいじってみる

Pythonのコードを書いてゆくうえで、まずはwsgiを変更してゆけばよい

wsgi.pyを変更したら、
$ sudo systemctl restart unit

でnginx unitの再起動が必要。

テストから離れたディレクトリの変更などは、別途挑戦予定。

→ディレクトリ変更はできた。
 /var/www/python-app に移動して、表示できることを確認済み。

nginx unitの設定値を見てみる

まず現状のnginx unitの設定値がどうなっているのか調べてみる。

$ sudo curl --unix-socket /var/run/control.unit.sock http://localhost/
{
        "applications": {
                "example_python": {
                        "type": "python 3.6",
                        "user": "nobody",
                        "processes": 2,
                        "path": "/usr/share/doc/unit-python3.6/examples/python-app",
                        "module": "wsgi"
                }
        },

        "listeners": {
                "*:8400": {
                        "application": "example_python"
                }
        }
}

なんか良く分からないが、8400ポートはexsample_pythonというアプリケーションのリスナーに使われている。
アプリケーションの設定は"applications"の中で定義されていて、ポート8400にアクセスがあると、/usr/share/doc/unit-python3.6/examples/python-app というディレクトリにあるwsgiというモジュールを読み込んでいるらしい。wsgiファイルはwsgi.py が正式なファイル名だった。

では、ここから実験。
アプリケーションリスナー設定を削除してみる。

$ sudo curl -X DELETE --unix-socket /var/run/control.unit.sock http://localhost/listeners/*:8400
{
        "success": "Reconfiguration done."
}

アプリケーション設定も削除してみる。
$ sudo curl -X DELETE --unix-socket /var/run/control.unit.sock http://localhost/applications/example_python
{
        "success": "Reconfiguration done."
}

本当に削除されたのか確認。

$ sudo curl --unix-socket /var/run/control.unit.sock http://localhost/
{
        "applications": {},
        "listeners": {}
}

削除されて空っぽになっている。
この状態でポート番号8400にアクセスするとどうなるのか?

$ curl http://localhost:8400
curl: (7) Failed to connect to localhost port 8400: 接続を拒否されました

予定通り繋がらなくなっている。

じゃあ最初の設定を start.json というファイルに保存して、再設定を掛けたらどうなるのか?

$ sudo curl -X PUT -d @start.json --unix-socket /var/run/control.unit.sock http://localhost/
{
        "success": "Reconfiguration done."
}

成功したらしい。
ちゃんと動いているのか確認してみる。

$ curl http://localhost:8400
2018-07-13 01:49:38 PM

Python: 3.6.5 (default, Apr  1 2018, 05:46:30)
[GCC 7.3.0]

ENV Variables:

LANG    ja_JP.UTF-8
LANGUAGE        ja_JP:ja
PATH    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
INVOCATION_ID   4495414f19f340b695fbcf64bf14c449
JOURNAL_STREAM  9:19378
DAEMON_ARGS     --log /var/log/unit.log --pid /run/unit.pid


動いているね。
ふむふむ、少しずつ分かってきたような。。。気もしてきた。