NGINX单元-开源Web应用程序服务器
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文件中。
有关更多详细信息,请参阅官方文档。