Nginx-Unitをとりあえず動かす

nginx unit

  • アプリケーション・サーバー
  • 対応言語: PHP,Python,Go (Nodejs, Javaも対応予定)
  • サーバごとにfast-cgiとして動作していた環境をunitとして提供される
  • アプリケーションの入れ替えやバージョンアップをシームレスに行うことが前提として開発されている
  • RESTfulAPI、JSONによる設定の変更・リロードもリアルタイムに反映される

なんとなくfast-cgi等で後ろで動いていたものをnginx unitを入れるとよしなにしてくれて、再起動とかディレクトリ管理とかをリアルタイムに停止しないでできるようになるというイメージ。javaとかgoなんかが簡単に管理できるのがうれしいかも。

インストール

リポジトリの設定

リポジトリのシグネチャファイルインストール

$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key

aptのsourceリストにnginxの場所追加

/etc/apt/sources.list

deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

aptを利用してインストール

$ sudo apt-get update
$ sudo apt-get install unit unit-dev
$ sudo service unitd start

動作確認

$ ps -ef | grep unitd
root      1511     1  0 03:14 ?        00:00:00 unit: main [/usr/sbin/unitd --log /var/log/unitd.log --pid /run/unitd.pi

動いている模様

UNITの設定ファイル

PHPの設定例

php.json
{
     "listeners": {
         "*:8080": {
             "application": "blogs"
         }
     },
     "applications": {
         "blogs": {
             "type": "php",
              "workers": 20,
              "root": "/var/www",
              "index": "index.php"
         }
     }
}

こんな感じで設定を読み込ませる

$ sudo curl -X PUT -d @php.json --unix-socket /var/run/control.unit.sock http://localhost/

listenersとアプリケーションは複数設定できるので、
ポートを変えて複数同時に動作させるなどができる模様。

サンプルファイル
/var/www/index.php

<?php
phpinfo();

http://localhost:8300/ にアクセスするとphpinfoの内容が表示される

Nginxとの連携

/etc/nginx/conf.d/default.conf

upstream unit_backend {
    server 127.0.0.1:8300;
}

server {
    listen       8080;
    server_name  localhost;

    location / {
        root /var/www;
        index index.php index.html index.htm;
    }

    location ~ \.php$ {
        proxy_pass http://unit_backend;
        proxy_set_header Host $host;
    }
}

http://localhsot:8080/ にアクセスするとphpinfoが表示

とりあえず動かすところまで、
javaとかバージョン依存のものがこのあたりで動かせるようになるとすごい助かる気がする。