NGINX单元-开源Web应用程序服务器

时间:2020-03-05 15:29:04  来源:igfitidea点击:

Nginx声明发布Unit Nginx Unit的第一个beta版本,Unit Nginx Unit是一种动态Web应用程序服务器,旨在以多种语言运行应用程序。
这是一个支持Python,PHP和Go的应用程序服务器,同时还支持Java,Node.js和Ruby。

单元轻巧,多语言,并通过API动态配置。
NGINX Unit当前以beta版本提供,因此不建议在生产中使用。
可以通过发出HTTP请求来配置单位

安装Nginx单元

NGINX Unit经过了测试,可以在以下系统上编译和运行:Linux 2.6或者更高版本,FreeBSD 9或者更高版本,MacOS X,Solaris11.
它存在于Centos 7和Ubuntu 16.04上,可以使用Unit的软件包。
对于正在运行的应用程序,我们需要python(2.6、2.7、3),php(5、7),Go(1.6或者更高版本)编程语言

a)在Centos 7上

我们需要首先创建仓库/etc/yum.repos.d/unit.repo

# vim /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
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 http://nginx.org/keys/nginx_signing.key

现在我们可以安装密钥

# apt-key add nginx_signing.key
OK

现在我们必须将Unit添加到我们的sources.list文件中

# vim /etc/apt/sources.list
deb http://nginx.org/packages/mainline/ubuntu/xenial nginx 
deb-src http://nginx.org/packages/mainline/ubuntu/xenial nginx

然后安装

# apt update
...............
...............
Get:8 http://nginx.org/packages/mainline/ubuntu xenial/nginx Sources [24.7 kB]
Get:9 http://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

配置并启动应用程序

单元配置需要包括与至少一个侦听器关联的应用程序。
因此,配置将分为两部分:侦听器和应用程序。
我们需要使用API为其部分中的每个应用程序定义一个JSON对象。
默认情况下,通过以下方法安装单元时,位于“ /var/run/control.unit.sock”或者“ /run/control.unit.sock”或者“ /run/control.unit.sock”的控制套接字文件control.unit.sock中可以使用Unit API。
预编译的软件包。

如果希望通过HTTP访问应用程序,则需要定义至少一个侦听器。
侦听器部分包括IP地址和Unit用来侦听对命名应用程序的客户端请求的端口。

"listeners": {
         "*:8300": {
             "application": "myapps"
         }
     }

在应用程序部分,JSON对象定义了该对象的几个特征,包括其编写的语言,要运行的应用程序工作进程的数量,包含该应用程序的文件的目录等。
我们必须注意,某些参数可以因语言而异,因此每个平台都有略微不同的选项。

"applications": {
         "myapps": {
             "type": "php",
             "workers": 20,
             "root": "/var/www/php-app",
             "index": "index.php"
         }
     }

要创建初始配置,我们首先需要创建一个配置对象,并在PUT请求的主体中为其指定JSON数据。
我们指定的端口是将用于启动应用程序的端口

我们可以如下所示指示json文件的路径:

# curl -X PUT -d @/path/file.json --unix-socket /var/run/control.unit.sock http://localhost:port

例如,我们将创建如下的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 http://localhost:4500
{
	"success": "Reconfiguration done."
}

我们可以看到配置已完成。
我们可以使用IP地址和指定的端口访问Web应用程序

我们可以看到API服务器是单位而不是apache,并且使用的端口是已配置的端口

Unit是有用的动态Web应用程序服务器,它提供了以多种语言运行应用程序的可能性。
我们可以指定要使用的端口。
我们可以通过遵守对象类型的定义将其他项目类型添加到相同的json文件中。
有关更多详细信息,请参阅官方文档。