NGINX 最近发布了一个开放源代码网络和应用服务器Unit 1.0的版本。该服务器支持远程和动态配置,并且不会因配置更改而中断服务。单元1.0还支持在同一实例上运行的多种语言(Go,Perl,PHP,Python和Ruby),包括同一种语言的多个版本。
NGINX单元不依赖静态配置文件,而是通过使用JSON 的REST API进行配置。所有配置都直接存储在内存中,允许在不重新启动正在运行的服务的情况下进行更改。路由器进程是持久的,不需要重新启动。
基本配置至少需要一个侦听器和一个应用程序。侦听器详细信息,端口和IP地址单元将侦听并重定向到指定的应用程序。应用程序定义允许指定语言,应用程序文件的目录以及进程的数量。
例如,您可以在端口8300上定义一个侦听器,以使用最多20个进程来提供位于/ www / blogs / scripts中的PHP应用程序:
{
"listeners": {
"*:8300": {
"application": "blogs"
}
},
"applications": {
"blogs": {
"type": "php",
"processes": 20,
"root": "/www/blogs/scripts",
"index": "index.php"
}
}
}
单元文档中的建议是将其存储在(版本控制的)文件中,然后将其发布到服务器。如果上述数据存储在名为start.json的文件中,则可以按如下方式创建初始配置:
# curl -X PUT -d @/path/to/start.
json
--
unix
-socket /path/to/control.unit.sock http://localhost/
单元保持路由器进程独立于运行应用程序代码的应用程序进程。每个应用程序进程池都在其自己的沙箱中运行,以确保与其他进程隔离。这种隔离允许以不同语言运行的多个应用程序共享同一台服务器。
NGINX单元架构图
在以下示例中,Go和Perl应用程序设置为在同一台Unit服务器上运行:
{
"listeners": {
"*:8500": {
"application": "go_chat_app"
},
"127.0.0.1:8600": {
"application": "bugtracker"
}
},
"applications": {
"go_chat_app": {
"type": "go",
"user": "www-chat",
"group": "www-chat",
"working_directory": "/www/chat",
"executable": "bin/chat_app"
},
"bugtracker": {
"type": "perl",
"processes": 3,
"user": "www",
"group": "www",
"working_directory": "/www/bugtracker",
"script": "app.psgi"
} }
}
根据NGINX产品负责人Owen Garrett的说法,Unit适用于独立或基于微服务的体系结构。它支持按需扩展进程,在自己的沙箱中执行每个进程。
NGINX计划在即将发布的版本中为Java和Node.js添加语言支持。该公司计划支持SSL和HTTP / 2,并支持使用URI和主机名来提供静态内容和路由。
NGINX Unit是开放源代码(Apache License 2.0),并且大多数操作系统都有预先构建的软件包,包括Debian,CentOS,Ubuntu等。Docker Hub上还有一个Docker容器。