看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!
NGINX最近发布了NGINX Unit 1.0 版。NGINX Unit 是一种开源的Web 和应用服务,它支持远程配置和动态配置,使得配置上的更改不会对服务造成中断。Unit 1.0 还支持在同一实例中运行Go、Perl、PHP、Python 和Ruby 等多种语言,也支持同一语言的多个版本。
NGINX Unit 并非依赖于静态的配置文件,而是使用 JSON通过REST API 进行配置。所有的配置直接存储在内存中,支持运行中的服务无需重启即可应用配置更改。路由过程同样也是持续的,不需要重启。
Unit 的基本配置需要指定至少一个监听器和一个应用。在对监听器的定义中,指定了 Unit 监听的具体 IP 和端口,并重定向到一个命名的应用。在对应用的定义中,可支持指定具体的语言、应用文件的目录和过程的数量。
例如,用户可以做如下的配置,在端口 8300 上定义一个监听器,为“/www/blogs/scripts”目录中的 PHP 应用提供服务,最大可使用 20 个进程:
{ "listeners": { "*:8300": { "application": "blogs" } }, "applications": { "blogs": { "type": "php", "processes": 20, "root": "/www/blogs/scripts", "index": "index.php" } } }
Unit 官方文档中的推荐做法,是将上述配置存储在一个(受版本控制的)文件中,然后 POST 到服务器端。如果上述配置是存储在一个名为 start.json 的文件中,那么可以使用如下命令创建初始配置:
# curl -X PUT -d @/path/to/start.json --unix-socket /path/to/control.unit.sock http://localhost/
Unit 实现了路由进程和具体运行应用代码的应用进程相分离。每个应用过程池在自身的沙箱中运行,这确保了该进程与其它进程的分离。这种分离支持运行不同语言的多个应用分享同一个服务器。
图 NGINX Unix 的架构(NGINX 官方提供)
下面的配置例子,设置在同一个 Unit 服务器中运行 Go 和 Perl 应用:
{ "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 上也提供了 Unit 的 Docker 容器。
查看英文原文: NGINX Releases Open Source Web Server with Dynamic Configuration
评论