Nginx 宣布發布第一個 beta of Unit – Nginx Unit,一種動態 Web 應用程序服務器,旨在以多種語言運行應用程序。 它是一個支持 Python、PHP 和 Go 的應用服務器,即將支持 Java、Node.js 和 Ruby。
Unit 是輕量級的、多語言的,並通過 API 動態配置。 NGINX 單元目前可作為 beta 因此,不建議在生產中使用。 可以通過發出 HTTP 請求來配置單元
安裝 Nginx 單元
NGINX Unit 經測試可在以下系統上編譯和運行:Linux 2.6 或更高版本、FreeBSD 9 或更高版本、MacOS X、Solaris 11。它存在可用於 Centos 7 和 Ubuntu 16.04 的 Unit 軟件包。 要運行應用程序,您需要 python (2.6, 2.7, 3), php (5, 7), Go (1.6 or later) 編程語言
a) 在 Centos 7 上
我們需要先創建 repo /etc/yum.repos.d/unit.repo
# vim /etc/yum.repos.d/unit.repo
[unit]
name=unit repo baseurl=https://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
現在我們可以安裝
# yum install unit
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.linode.com
* epel: fedora-epel.mirrors.tds.net
* extras: mirrors.linode.com
* updates: mirrors.linode.com
Resolving Dependencies
--> Running transaction check
---> Package unit.x86_64 0:0.1-1.el7.ngx will be installed
--> Processing Dependency: libphp5-5.4.so()(64bit) for package: unit-0.1-1.el7.ngx.x86_64
--> Running transaction check
---> Package php-embedded.x86_64 0:5.4.16-42.el7 will be installed
--> Finished Dependency Resolution
b) 在 Ubuntu 16.04 上
我們首先需要下載 PGP 密鑰
# wget https://nginx.org/keys/nginx_signing.key
現在我們可以安裝密鑰
# apt-key add nginx_signing.key
OK
現在我們必須將 Unit 添加到我們的 sources.list 文件中
# vim /etc/apt/sources.list
deb https://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src https://nginx.org/packages/mainline/ubuntu/ xenial nginx
然後安裝它
# apt update
...............
...............
Get:8 https://nginx.org/packages/mainline/ubuntu xenial/nginx Sources [24.7 kB]
Get:9 https://nginx.org/packages/mainline/ubuntu xenial/nginx amd64 Packages [35.2 kB]
# # apt install unit
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libdvdnav4 libdvdread4 libenca0 libguess1 librubberband2v5 libsdl2-2.0-0 libsndio6.1 libva-wayland1 libva-x11-1 mpv rtmpdump
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
libphp-embed libphp7.0-embed
Suggested packages:
php-pear
The following NEW packages will be installed:
libphp-embed libphp7.0-embed unit
配置和啟動應用程序
Unit 配置需要包含與至少一個偵聽器關聯的應用程序。 因此,配置將有兩個部分: 聽眾 和 應用。 您需要使用 API 為其部分上的每個應用程序定義一個 JSON 對象。 默認情況下,單元 API 在控制套接字文件中可用 control.unit.sock 位於 /var/run/control.unit.sock
或者 /run/control.unit.sock
當您通過預編譯包安裝單元時。
如果您希望您的應用程序可通過 HTTP 訪問,您至少需要定義一個偵聽器。 偵聽器部分包括 IP 地址和 Unit 在其上偵聽客戶端對命名應用程序的請求的端口。
"listeners": {
"*:8300": {
"application": "myapps"
}
}
在應用程序部分,JSON 對象定義了它的幾個特徵,包括它所用的語言、要運行的應用程序工作進程的數量、應用程序的一個或多個文件的目錄等。您必須注意一些參數可以因語言而異,因此每個平台的選項略有不同。
"applications": {
"myapps": {
"type": "php",
"workers": 20,
"root": "/var/www/php-app",
"index": "index.php"
}
}
要創建初始配置,您首先需要創建一個配置對象,在 放 要求。 您指定的端口是將用於啟動應用程序的端口
可以指定json文件的路徑,如下圖:
# curl -X PUT -d @/path/file.json --unix-socket /var/run/control.unit.sock https://localhost:port
為了 example, 我們將創建如下 json 文件:
#vim /var/www/html/apps.json
{
"listeners": {
"*:4500": {
"application": "apps"
}
},
"applications": {
"apps": {
"type": "php",
"workers": 10,
"user": "www-php",
"group": "www-php",
"root": "/var/www/html",
"index": "index.php"
}
}
}
既然決定使用4500端口,那我們就應該打開使用
# firewall-cmd --zone=public --permanent --add-port=4500/tcp
# firewall-cmd --zone=public --permanent --add-port=4500/udp
# firewall-cmd --reload
現在我們將使用以下命令創建一個初始配置文件:
# curl -X PUT -d @/var/www/html/apps.json --unix-socket /var/run/control.unit.sock https://localhost:4500
{
"success": "Reconfiguration done."
}
可以看到配置已經很好了。 您可以使用指定的 IP 地址和端口訪問您的 Web 應用程序
可以看到API server是unit而不是apache,使用的端口是配置的
Unit 是一個有用的動態 Web 應用程序服務器,它提供了以多種語言運行您的應用程序的可能性。 您可以指定要使用的端口。 您可以通過遵守對像類型的定義將其他項目類型添加到同一個 json 文件中。 有關更多詳細信息,您可以查看 官方文件.