介绍 NGINX 1.16 和 1.17

今天我们发布了 NGINX 1.17.0 – NGINX 开源项目的最新版本,它现在是互联网上最流行的 Web 服务器。继上个月发布 NGINX 1.16.0 之后,此版本还标志着 NGINX 1.17 开发分支的开始。

在本博客中,我们讨论 NGINX 版本控制方案,回顾 NGINX 1.15 开发周期中发生的事情,并展望 NGINX 1.17 的未来。

NGINX 版本控制说明

在 NGINX,我们在 NGINX 源代码存储库中维护两个分支,名为 mainline 和 stable:

  • 主线是活跃的开发分支,其中添加了最新功能和错误修复。它由版本号第二部分中的奇数表示,例如 1.17.0。
  • 稳定版修复了高严重性错误,但未更新新功能。在版本 n 的第二部分用偶数表示数字,例如 1.16.0。

“稳定”意味着什么

在 NGINX,“稳定”一词指的是功能和更新频率。它与软件质量无关。稳定分支在其生命周期内永远不会接收新功能,通常只接收一两个更新,以修复关键错误。

稳定分支具有年度生命周期。每年四月,我们都会停用当前的稳定分支,之后不再提供进一步的错误修复。这会触发两个事件:

  • 首先,分叉当前的主线版本,以创建下一个稳定版本。稳定分支继承了过去一年进入主线的所有错误修复、功能和其他更改。上个月,NGINX 1.15.12 被分叉为 NGINX 1.16.0。请注意,在下一个主线版本之前,“稳定”与当前主线版本相同,并且可能包括几天前的新功能。
  • 其次,主线分支得到s “版本升级”;也就是说,版本号的第二部分递增到下一个奇数。主线分支中的持续开发仍在继续,每 4-6 周就会从主线构建新版本。今天是 NGINX 1.17 主线上的第一个版本,即 NGINX 1.17.0。

2019 年 NGINX 开源分支年度“版本碰撞”

NGINX Plus 使用哪个分支?

NGINX Plus 是 NGINX 的商业版本,在单独的私有代码存储库中维护。它始终基于最新版本的 NGINX 主线,并与 NGINX Plus 附带的其他闭源特性和功能合并在一起。在撰写本文时,NGINX Plus 的最新版本是 R18,基于 NGINX 1.15.10。

我应该使用哪个分支?

我们通常建议使用主线分支。这是我们提交所有新功能、性能改进和增强功能的地方。我们积极测试和质量检查主线分支,并且作为 NGINX Plus 的源代码构建,它完全适合生产使用。

如果您担心监视主线分支的新功能和错误修复的开销,那么使用稳定分支意味着您只需每年检查一次新功能,并且很少检查错误修复。

NGINX 1.15 回顾,又名稳定版 NGINX 1.16 的新增功能

NGINX 1.15 开发周期进行了一些重大开发工作,包括对 Stream 模块中的 UDP 代理的改进、随机负载平衡方法、对 TLS 1.3 早期数据的支持、SSL 证书的动态加载等等。在我们更详细地了解最重要的增强功能之前,请先看一下 NGINX 1.15 的数据:

  • 13 个主线版本(平均每 4 周发布一个)
  • 修复了 16 个错误
  • 19 项新功能
  • 净增 3000 行新代码(增加了代码库增加了 2.2%)

UDP 代理的改进

NGINX 1.9.13 中首次引入了对代理和负载平衡 UDP 流量的支持。这使得 NGINX 能够领先于 DNS、syslog、NTP 和 RADIUS 等流行的 UDP 应用程序,从而提供应用程序服务器的高可用性和可扩展性。最初的实现仅限于 UDP 应用程序,这些应用程序每次与服务器交互时都需要来自客户端的单个 UDP 数据包。

NGINX 1.15.0 中支持 UDP 会话,这意味着可以代理更复杂的 UDP 应用程序并进行负载平衡。其中包括 OpenVPN、VoIP 和虚拟桌面解决方案。 NGINX 1.15.7 添加了 proxy_requests 指令,该指令可以更好地控制虚拟 UDP 会话如何“连接”到后端服务器。此外,所有 UDP 应用程序(简单或复杂)的处理速度也显着加快。

TLS 1.3 早期数据

一个TLS 1.3 中引入的性能改进称为 0-RTT(零往返时间)。通过减少重新建立加密会话时客户端和服务器之间的往返次数,可以更快地恢复 TLS 会话。 NGINX 现在通过 ssl_early_data 指令支持 0-RTT。

动态证书加载

在管理安全站点和应用程序的 TLS/SSL 证书时,NGINX 通常配置为将证书和关联的私钥指定为磁盘上的文件。每个主机名的证书和密钥在单独的服务器块中指定为静态配置,并在 NGINX 启动时加载。 NGINX 1.15.9 通过使用 SNI 变量 $ssl_server_name 来定位磁盘上的文件来启用动态加载。 NGINX 1.15.10 通过允许从变量获取证书数据进一步扩展了这一点。

随机负载均衡和“两种选择的力量”

NGINX 1.15.1 添加了随机负载均衡方法,专门针对分布式负载均衡部署,其中多个 NGINX 实例负载均衡到同一组后端服务器。

随机负载平衡的一种简单变化(但已被证明可以改善负载分布)是随机选择两个后端服务器,然后选择负载较低的一个。我们称之为“有两种选择的随机”。比较两个随机选择的目的是避免做出错误的负载平衡决策(即使该选择可能不是所有可用服务器中最好的)。通过避开负载较大的后端服务器,每个负载均衡器可以独立运行,而不会向各个后端服务器发送流量峰值。因此,我们获得了随机负载平衡的好处和计算效率,但具有明显更好的负载分布。具有两种选择的随机现在是由以下配置的默认负载平衡方法Kubernetes 的官方 NGINX 入口控制器。

两阶段速率限制

NGINX 可以通过拒绝过多的请求或延迟过多的请求直到可以在定义的速率限制内处理它们来强制执行请求速率限制。 NGINX 1.15.7 使这两种强制方法能够结合在两阶段速率限制中,过量的请求最初会被延迟,如果无法按照限制进行处理,则最终会被拒绝。使用 limit_req 指令的延迟参数启用两阶段速率限制。

感谢 Vladislav Shabanov 和 Peter Shchuchkin 的贡献。

监听端口范围

NGINX 1.15.10 可以使用 HTTP 和 Stream 模块侦听一系列端口,从而实现 FTP 代理的常见请求功能。

JavaScript 模块的成熟度

NGINX JavaScript 模块 (njs) 是 NGINX 的便捷脚本扩展,并提供了通过扩展 NGINX 来实现高级用例。在 NGINX 1.15 开发周期中,JavaScript 模块在 10 个版本中获得了 38 个新功能。这里列出的内容太多,但最重要的是:

  • 支持 JavaScript 模块,以便可以使用导入和导出方法跨多个文件管理代码
  • 对函数和原型提供更丰富的支持,包括“粗箭头”函数
  • 对非整数的更广泛支持
  • 二进制文字以及字节之间的转换

NGINX 1.17 中的新功能

NGINX 1.17 主线上的第一个版本已经发布。 NGINX 1.17.0 通过 limit_rate 指令支持带宽限制配置中的变量,并允许在所有配置上下文中使用 include 指令,甚至在 if 块内也是如此。

对 QUIC 和 HTTP/3 的支持也已开始开发——下一个重大更新遵守将交付网站、应用程序和 API 的传输协议。这是一项重大任务,但可能会在 NGINX 1.17 开发周期内实现。要了解有关 NGINX 路线图以及我们其他开源项目和产品的最新见解,请参加我们于 9 月 9 日至 12 日在西雅图举行的年度用户大会 NGINX Conf。


评论

发表回复

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