面白そうだったから触ってみた
目次
- 環境
- 触ってみる
- 自分で設定してみる
- nginxと繋ぎこむ
- その他
- curlで設定変えてみたり(20170909追記)
環境
- OS: CentOS Linux release 7.3.1611 (Core)
触ってみる
リポジトリ設定
/etc/yum.repos.d/unit.repo
[unit]
name=unit repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
インストール
# yum install unit
とりあえず動かしてみる
パッケージ入れた時に↓みたいなのが出てくるので一度叩いてみて動作確認すると良さげ
----------------------------------------------------------------------
Thank you for installing NGINX Unit!
You may want to load demo configuration and check a couple of apps:
# service unitd start
# service unitd restoreconfig /usr/share/doc/unit/examples/example.config
# curl http://localhost:8300/
# curl http://localhost:8400/
Online documentation is available at http://unit.nginx.org/
----------------------------------------------------------------------
自分で設定してみる
unitの設定
/etc/unit/sample.conf
{
"listeners": {
"*:8300": {
"application": "php-sample"
},
"*:8400": {
"application": "go-sample"
},
"*:8500": {
"application": "python-sample"
}
},
"applications": {
"php-sample": {
"type": "php",
"workers": 20,
"root": "/var/www/php-app",
"index": "sample.php"
},
"go-sample": {
"type": "go",
"executable": "/var/www/go-app/sample",
},
"python-sample": {
"type": "python",
"workers": 20,
"path": "/var/www/python-app",
"module": "sample"
}
}
}
適当なphp
/var/www/php-app/index.php
<?php
echo "Nginx-Unit PHP Test\n";
適当なgolang(うまく動かなかったので勉強しときます)
/var/www/go-app/sample.go
適当なpython
/var/www/python-app/sample.py
def application(environ, start_response):
output = "Nginx-Unit Python Test\n"
start_response('200 OK', [('Content-type', 'text/plain')])
return [output]
unitd動かして設定を反映させる
# service unitd start
# service unitd restoreconfig /etc/unit/sample.config
動作確認
# curl localhost:8300
Nginx-Unit PHP Test
# curl localhost:8400
Read header timeout
# curl localhost:8500
Nginx-Unit Python Test
nginxと繋ぎこむ
普通にリバプロするだけなので分かる人は読み飛ばして下さい
http内にupstream追加
/etc/nginx/nginx.conf
http {
〜
upstream unit_php {
server 127.0.0.1:8300;
}
}
virtualhost設定
/etc/nginx/conf.d/sample.conf
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://unit_php/;
proxy_set_header Host $host;
}
}
動作確認
# curl localhost
Nginx-Unit PHP Test
その他
設定のお手軽感ある分、細かい設定項目少なかったので、これからのバージョンアップが楽しみ
あと今回はやってないけどcurlでも設定とかできそうだったのでそのうち試したい
golangは別途勉強しておきます
以下追記(20170909
curlで設定変えてみたり
適当なPHPを用意
<?php
echo "hogehoge\n";
動作確認
# curl localhost
Nginx-Unit PHP Test
# curl -X PUT -d '"sample2.php"' --unix-socket /var/run/control.unit.sock http://localhost/applications/php-sample/index
{
"success": "Reconfiguration done."
}
# curl localhost
hogehoge
リモートで設定変えたり
nginxにAPI用confを追加
server {
listen 8080;
location / {
proxy_pass http://unix:/var/run/control.unit.sock;
}
}
※テストなのでこの設定にしたけど本来であればドキュメントにもあるように
クライアント証明書だったりいれないとセキュリティ的にやばめ
socketファイルの権限変更
chmod 666 /var/run/control.unit.sock
※この方法は最高にイケてないのでphp-fpm
のlisten.user
的なものが欲しい
unitdそのもののconf見かけてないけどどっかにないかな…?
動作確認(どこかしら別の環境から)
# curl http://xxx.xxx.xxx.xxx/
hogehoge
λ curl h-X PUT -d '"python-sample"' http://210.129.18.150:8080/listeners/*:8300/application
{
"success": "Reconfiguration done."
}
# curl http://xxx.xxx.xxx.xxx/
Nginx-Unit Python Test