NGINX 单元 1.10.0 现已推出

夏天已经过去了,是时候放弃宁静,重新开始工作了。 NGINX Unit 团队最近推出了我们的第一个两位数版本 NGINX Unit 1.10.0;让我们回顾一下最近的进展并阐明我们未来的计划。

路由改进

在我们的两个最新版本中,我们做了一些主要工作来扩展最初在 NGINX Unit 1.8.0 中引入的请求路由功能。版本 1.9.0 在匹配子句中包含对参数、标头和 cookie 的基本支持,而 NGINX Unit 1.10.0 添加了基于方案的路由。几个例子:

“匹配”: {
“主机”:“www.example.com”,
“参数”:{
“模式”:[“移动”,“桌面”],
“ui”: “!满”
}
}

此条件匹配 www.example.com/?mode=mobile 和 www.example.com/?mode=desktop&ui=compact 等查询,但不匹配 www.example/com/?mode=desktop&ui=full。

”匹配”: {
“标题”:[
{
“接受编码”: “*gzip*”,
“用户代理”:“Mozilla/5.0*”
},

{
“用户代理”:“卷曲*”
}
]
}

此子句仅匹配 User-Agent 标头为 Mozilla/5.0(并且还应用 gzip 压缩)或curl 的请求。

“匹配”: {
“主机”:“example.com”,
“方案”:“https”
}

此条件匹配 https://example.com,但不匹配 http://example.com。

模式匹配也进行了扩展,允许在匹配字符串中间使用通配符:

“匹配”: {
“主机”: [“eu-*.example.com”, “!eu-5.example.com”]
}

该子句与 example.com 的所有 eu- 子域匹配(eu-5.example.com 除外)。

配置更新

配置 API 也得到了一些改进。最重要的是,它现在支持非幂等 POST 语义。用不太花哨的术语来说,这意味着您可以将新项目附加到数组中,这确实发生在 NGINX Unit 配置中。例如,考虑一下从curl查询到NGINX Unit的控制套接字的示例输出:

#curl –unix-socket /path/to/control.unit.sock http://localhost/config/

{
“听众”:{
“*:8000”:{
“通行证”:“路线”
}
},

“应用程序”:{
“博客”:{
“类型”:“蟒蛇”,
“模块”:“wsgi”,
“路径”:“/www/博客/”
}
},

“路线”:[
{
“匹配”: {
“主持人”: [
“dev1.example.com”,
“dev2.example.com”
]
},

“行动”: {
“pass”: “应用程序/博客”
}
}
]
}

让我们解读 JSON:配置包括一个名为 blogs 的应用程序、一个允许通过两个主机名访问该应用程序的路由部分,以及一个通过路由引擎传递传入请求的侦听器。使用 POST 方法,我们将新主机名附加到主机t 数组:

#curl -X POST -d ‘”dev3.example.com”‘ –unix-socket=/path/to/control.unit.sock \
http://localhost/config/routes/0/match/host/
{
“success”: “重新配置完成。”
}

请注意,来自 NGINX 单元的所有响应也都以 JSON 进行编码。接下来,我进行一个curl 查询以仅显示路由部分:

#curl –unix-socket /path/to/control.unit.sock http://localhost/config/routes/

[
{
“匹配”: {
“主持人”: [
“dev1.example.com”,
“dev2.example.com”,
“dev3.example.com”
]
},

“行动”: {
“pass”: “应用程序/博客”
}
}
]

如您所见,POST 操作将其有效负载附加到主机数组的末尾。这里值得一提的是,NGINX Unit 仅更改受更新影响的配置部分,动态计算旧配置和新配置之间的差异,以最大限度地减少开销。方便!

在其他新闻中,我们还消除了一些令人讨厌的错误,使配置操作更加可靠。

应用程序语言

大多数语言支持的最新变化都是针对 Node.js 的,包括 NGINX Unit 1.10.0 中新的内置 WebSocket 服务器实现。要使用它,只需指定我们的模块作为 require 函数的参数,而不是原生的 websocket 模块:

var webSocketServer = require(‘unit-http/websocket’).server;

此外,NGINX Unit 1.10.0 添加了一些轴润滑脂,以改进与最新 Node.js 版本的集成;还修复了一些兼容性错误。

语言支持的另一个重大更新是 PHP 模块将请求 URI 解析到 PATH_INFO 环境变量的新功能 – 这是许多 PHP 开发人员所依赖的。这一变化可能看起来很小,但它使运行 NextCloud 等一些主要应用程序变得更容易,如闪亮的为了您的方便,我们提供了新的操作方法。哦,说到……

文档

我们的文档在过去几个月中得到了显着扩展,提供了各种指南和操作方法,以回应您富有洞察力的查询、友好的 GitHub 咆哮以及对某些功能如何工作的合理但错误的假设。

一些主要更新包括在 Docker 中运行 NGINX Unit 的指南,其中附有每种受支持语言的示例 Dockerfile、语言模块操作的端到端指南以及流行应用程序的操作方法以及 Catalyst 和 Redmine 等框架(以及前面提到的 NextCloud)。还有更多内容 – 请偶尔查看文档或在 GitHub 上发布您的“必须看到这个应用程序在 NGINX Unit 上运行”的想法。

结论

旅程仍在继续,NGINX Unit 正在蓄势待发。我们的团队很稳定我们正在与新人带来新想法一起成长,因此请关注我们以获取更多令人兴奋的消息(我们已经在准备中):查看变更日志中的最新更新或监视我们的 GitHub 存储库以加入讨论和开发。

最后,谈谈未来的更新。目前,我们正在努力实现长期承诺的功能,例如 Java 的 WebSocket 支持、静态资产服务和代理。我们的团队非常认真地想让 NGINX Unit 成为一个非常繁忙的小型 Web 引擎。请继续关注!

有兴趣成为 NGINX 的全职工程师吗?查看我们的求职板。

NGINX Plus 订阅者无需额外付费即可获得 NGINX Unit 支持。立即开始 30 天免费试用 NGINX Plus。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注