Nginx Unitって何ぞ?

Nginx Unitって何ぞ?

ども、ピン村でございます。
ここ最近は、特に目立ったこともなくお伝えすることがないという一番苦しい状況が続いておりますが、インターンさせていただいている会社さんで業務している間にNginx Unitに触ってみた(休憩がてら) のでとりあえず、手順だけ載せておこうと思います。
つまるところ、私事の備忘録であります。

ではいってみましょう。

Contents

Nginx Unitについて

Nginxというお名前だけでも聞いたことはあるでしょうか。
下記、Nginxの公式HPからの引用です。

NGINXアプリケーションプラットフォームは、パフォーマンス、信頼性、セキュリティ、および規模を備えたアプリケーションを作成するために組織が必要とするものの中核を形成する一連の製品です。NGINXアプリケーションプラットフォームには、ロードバランシングとアプリケーション配信用のNGINX Plus、セキュリティ用のNGINX WAF、およびアプリケーションコードを実行するためのNGINXユニットが含まれ、すべてNGINXコントローラによって監視および管理されます。

つまるところ、静的なwebページだったりするとレスポンスめっちゃ早いっすよってことが言いたいことです。
しかしながら、以前の記事にも載せてある通りですが"爆速Nginx先輩で作るRedmine"などに関しては動的なWebアプリケーションになるので結局のところ処理はRubyのライブラリなどで行われ、Nginxの良さはあまり発揮されないのが現状です。

そこで、プログラミング言語をサポートするwebアプリケーションサーバとして、Nginx Unitが爆誕したわけであります。
このプロダクトが誕生したことにより、webアプリケーションの処理は各言語の処理コンパイラまで持っていかなくてもNginx Unitさんが処理してくれるということで独自の爆速仕様により従来よりもレスポンス速度が飛躍的に向上するというわけです。

Nginx Unit 使ってみよぉ

というわけで、Nginx Unitを使ってWordPressを運用まで持っていくことが主目的になりますが今回の記事は区切りがいい PHP infoの確認までとします。

実現したいこと

  • 今までサーバを建ててきたRedmine や Git1サーバ , WordPressなどをNginxシリーズのみを用いて運用したい。
  • 俺、Rubyとかそういうのよく分かんないから、Nginxさんにお任せしたい
  • インターン先でjava(Tomcat)使ってるんだけども、Tomcatがクソすぎて使いたくない(そして動作が重いのでレスポンス向上も含める)

こんな感じでしょうか。
現行のNginx Unitでは、Go、Perl、PHP、Python、Rubyの5種類が対応していますが今後のアップデートでjava と node.jsは対応させていくそうです。
※2018年12月末日のNginx ブログで node.js対応の文言を発見

では、実際にインストールしていってみましょう。

構築環境について

  • CentOS 7.6
  • Nginx 1.14.2
  • Nginx Unit 1.7
  • PHP 7.3

これで、行きます。

インストール作業

CentOSのインストール作業は簡略します。
なお、前提としてサーバにSSH接続しているものとします。

[root@localhost ~]# vi /etc/yum.repos.d/unit.repo  

[unit]
name=unit repo
baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@localhost ~]# vi /etc/yum.repos.d/nginx.repo  

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1  

とりあえず、Nginx Unitをインストールするためのrepoがないことには始まらないので追加します。

[root@localhost ~]# yum -y install nginx unit unit-php unit-python unit-go unit-perl unit-devel  

Nginx Unitと対応言語のモジュールパッケージをインストール  

ここまで、インストールできましたら次に自動起動設定を行います。

[root@localhost ~]# systemctl enable nginx unit  

Nginx Unitの自動起動設定を行います。  

この後は、再起動を一旦かけるのでSELinux と firewalldを無効化していきます。

[root@localhost ~]# systemctl disable firewalld  
[root@localhost ~]# vi /etc/sysconfig/selinux  

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled  

いつも通りです。
この作業が終わったら、再起動をかけてください。

では、マシンが戻ってきたら再度SSH接続を行い続きの設定をします。

[root@localhost ~]# cd /root  

[root@localhost ~]# vi start.json  

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

    "applications": {
        "blogs": {
            "type": "php",
            "user": "nobody",
            "group": "nobody",
            "root": "/usr/share/nginx/html",
            "index": "index.php"
        }
    }
}

[root@localhost ~]# curl -X PUT -d @/root/start.json --unix-socket /var/run/control.unit.sock http://localhost/config/  

これで、  

{
        "success": "Reconfiguration done."
}

のように表示されればokです。  

では、start.jsonで記述した /usr/share/nginx/htmlにindex.phpを作ります。

[root@localhost ~]# vi /usr/share/nginx/html/index.php  

<?php phpinfo(); ?>

と記述で大丈夫です。  

[root@localhost ~]# curl -X PUT -d @/root/start.json --unix-socket /var/run/control.unit.sock http://localhost/config/  

で再反映させます。  

では、/root/start.jsonでport番号を指定していますので webブラウザ (google Chrome とか firefoxで) http://サーバIP:8300 とURL欄に入力し検索してみましょう。
そうすると、

image

このように表示されたでしょうか。

ここまで、表示するのに苦労しましたがNginx Unitの設定ページではこのようなコマンドが記述されています。

[root@localhost ~]# curl -X PUT -d @/path/to/start.json --unix-socket /path/to/control.unit.sock http://localhost/config/  

このように記載されていますが、/path/toというディレクトリはLinuxにデフォルトで存在していないディレクトリになります。
これに苦しめられ、一向に設定ファイルがロードされないということがありました。
なお、start.json``/path/to`というディレクトリを作って`start.json`を配置してもいいですが、`/path/to/control.unit.sock`は、`/var/runディレクトリに存在しておりますのでそこに引っかかってしまいました....

さすがは、先人です。
この、解決案があってようやくできました。ありがとうございます。

https://symfoware.blog.fc2.com/blog-entry-2134.html
Symforware様