NGINX Unit 是一个轻量级、多功能的开源服务器,具有两个主要功能:
提供静态媒体资产,
以八种语言运行应用程序代码。
Unit 将现代应用程序堆栈的多个层压缩为一个有效、一致的解决方案,重点关注性能、低延迟和可扩展性。它旨在作为任何 Web 架构的通用构建块,无论其复杂性如何,从企业规模部署到宠物主页。
其原生 RESTful JSON API 支持零中断和灵活配置的动态更新,同时其开箱即用的生产力可靠地扩展到生产级工作负载。我们通过包含多个进程的复杂、异步、多线程架构来实现这一目标,以确保安全性和稳健性,同时充分利用当今的计算平台。
运行以下命令安装unitd
(Unit守护进程)和unitctl
(控制工具)。
$brew安装nginx/单元/单元
有关详细信息和可用的语言包,请参阅文档。
$ docker pull unit:$ mkdir /tmp/unit-control # 根据需要自定义。$ docker run -d --mount type=bind,src=/tmp/unit-control,dst=/var/run --mount type=bind,src=.,dst=/www --网络主机单位
有关图像标签的说明,请参阅文档。
警告:最新的图像标签可能不提供对特定语言模块的支持,请在拉取图像之前从上面的链接检查可用的图像标签。
您当前的工作目录现在将安装到位于/www
单元映像中。假设没有进行进一步的自定义,您可以通过/tmp/unit-control/control.unit.sock
访问其套接字。
此帮助程序脚本为系统配置正确的包存储库。
$ wget https://raw.githubusercontent.com/nginx/unit/master/tools/setup-unit && chmod +x setup-unit# ./setup-unit repo-config
Debian 衍生品:
# apt安装单元
Fedora 衍生品:
# yum 安装单元
有关详细信息和可用的语言包,请参阅文档。
unitctl
unitctl
通过易于使用的命令行界面简化了 NGINX Unit 进程的管理。要开始使用unitctl
,请从官方 GitHub 版本或 Homebrew 下载它。
笔记
如果您使用 Homebrew 安装了 Unit,则可以跳过此步骤,因为默认情况下包含了unitctl
。
从 NGINX Unit 版本中下载适合您系统的unitctl
二进制文件。
$ tar xzvf unitctl-master-x86_64-unknown-linux-gnu.tar.gz# mv unitctl /usr/local/bin/
如果您的计算机上安装了 Docker,那么您可以轻松地在您的应用程序旁边启动 Unit 的官方 Docker 映像之一。
提示
unit.nginx.org 上提供了使用 Python、PHP、WebAssembly、Node.js、Ruby 等构建的 Web 应用程序框架的操作方法和配置指南。
以下是使用unit:python
Docker 映像的示例:
$ unitctl 实例新 127.0.0.1:8001 /path/to/app 'unit:python'
/path/to/app
将挂载到 Docker 文件系统中的/www
。
将其保存到/path/to/app/wsgi.py
:
def application(environ, start_response): start_response("200 OK", [("Content-Type", "text/plain")]) return (b"Hello, Python on Unit!")
然后,您可以交互地编辑当前活动的配置:
$unitctl 编辑
{ "listeners": { "*:8000": { // 将侦听器指向新应用程序 "pass": "applications/python" } }, // 添加应用程序定义 "applications": { "python": { "type ": "python", "路径": "/www/", "模块": "wsgi" } }}
保存并关闭时将应用有效配置。
$curl localhost:8000你好,Python on Unit!
更多 Python 配置示例可以在 Unit 文档中找到。
Unit 运行多种语言的应用程序。让我们探索一下如何使用curl
在Unit 上配置一个简单的PHP 应用程序。
假设您将 PHP 脚本保存为/www/helloworld/index.php
:
要在安装了unit-php
模块的Unit上运行它,首先设置一个应用程序对象。让我们将第一个配置片段存储在名为config.json
的文件中:
{ “helloworld”:{ “类型”:“php”, “root”:“/www/helloworld/” } }
没有必要将其保存为文件,但对于较大的对象可以派上用场。
现在, PUT
其放入 Unit 控制 API 的/config/applications
部分,通常默认情况下可通过 Unix 域套接字使用:
#curl -X PUT --data-binary @config.json --unix-socket /path/to/control.unit.sock http://localhost/config/applications
{“成功”:“重新配置完成。”}
接下来,从 API 的/config/listeners
部分中的侦听器对象引用该应用程序。 这次,我们直接从命令行传递配置片段:
#curl -X PUT -d '{"127.0.0.1:8080": {"pass": "applications/helloworld"}}' --unix-socket /path/to/control.unit.sock http://本地主机/配置/监听器
{ "success": "重新配置完成。"}
现在Unit接受指定IP和端口的请求,并将它们传递给应用程序进程。你的应用程序可以运行了!
$curl 127.0.0.1:8080 你好,PHP on Unit!
最后,查询控制 API 的整个/config
部分:
#curl --unix-socket /path/to/control.unit.sock http://localhost/config/
单元的输出应包含组织整齐的两个片段:
{ “听众”:{ “127.0.0.1:8080”:{ “通过”:“应用程序/helloworld” } }, "applications": { "helloworld": { "type": "php", "root": "/www/helloworld/" } } }
单元支持运行 WebAssembly 组件 (WASI 0.2)。有关更多信息,请参阅单元配置文档。
我们的 OpenAPI 规范旨在简化 NGINX Unit 部署的配置和集成,并提供有关控制 API 的权威知识来源。
开始提问和分享想法的首选地点是 GitHub 讨论区。
我们的 GitHub 问题页面提供了按照您自己的节奏进行更多技术讨论的空间。
GitHub 上的项目地图揭示了我们当前的工作和未来的计划。
我们的官方网站可能会提供不易找到的答案。
通过贡献参与该项目!有关详细信息,请参阅贡献指南。
要直接联系团队,请订阅邮件列表。
对于安全问题,请给我们发送电子邮件,在主题中提及 NGINX Unit 并遵循 CVSS v3.1 规范。