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欄に入力し検索してみましょう。
そうすると、
このように表示されたでしょうか。
ここまで、表示するのに苦労しましたがNginx Unitの設定ページではこのようなコマンドが記述されています。
[root@localhost ~]# curl -X PUT -d @/path/to/start.json --unix-socket /path/to/control.unit.sock http://localhost/config/
このように記載されていますが、
というディレクトリはLinuxにデフォルトで存在していないディレクトリになります。/path/to
これに苦しめられ、一向に設定ファイルがロードされないということがありました。
なお、
ディレクトリに存在しておりますのでそこに引っかかってしまいました....start.json
`は
`/path/to
`というディレクトリを作って
`start.json
`を配置してもいいですが、
`/path/to/control.unit.sock
`は、
`/var/run
さすがは、先人です。
この、解決案があってようやくできました。ありがとうございます。
https://symfoware.blog.fc2.com/blog-entry-2134.html
Symforware様