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 动态增加配置 nginx动态配置server_Nginx

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),并且大多数操作系统都有预先构建的软件包,包括DebianCentOSUbuntu等。Docker Hub上还有一个Docker容器