NGINX, Inc.宣布推出应用交付平台的最新版本NGINX Plus Release 9(R9)。此更新提供两项重要的新功能:无需自定义二进制文件即可为NGINX Plus动态加载功能丰富的扩展,以及在现有TCP和HTTP负载均衡功能之外新增提供商业支持的UDP负载均衡。
除了NGINX Plus R9中令人期待的新功能外,我们还推出了新的定价和支持选项。NGINX Plus现提供“不限量使用”定价模式,只需支付固定价格,即可在应用或企业内的任何位置不限量使用。现在购买NGINX Plus时还可选择三种不同的支持级别:面向非生产应用的Basic 9×5支持、通过电话或电子邮件提供的Professional 24×7支持,以及保证在30分钟内响应的Enterprise 24×7支持。
编辑注:有关NGINX Plus R9主要新功能的更多详情,请参阅以下相关资源。
- 使用NGINX和NGINX Plus对DNS流量进行负载均衡
- 使用DNS通过NGINX和NGINX Plus进行服务发现
- 使用Consul中的DNS SRV记录为NGINX Plus实现服务发现
- NGINX Plus R9新增功能(点播网络研讨会)
NGINX Plus R9的主要新功能包括:
- 动态模块:NGINX Plus现在可通过动态加载模块在运行时进行扩展。这意味着可以仅选择所需的扩展,并通过标准
apt和yum命令直接从NGINX Plus存储库安装。我们将逐步为软件提供越来越多经过测试和全面认证的扩展。由NGINX开发以及第三方提供的常用模块(例如支持Lua编程语言的模块)均已转换为新的动态加载格式。我们还发布了面向第三方模块所有者的说明,指导其将模块转换为新格式。模块必须完成此转换,才能添加到我们的存储库中。 - UDP负载均衡:NGINX Plus在现有TCP和HTTP负载均衡功能的基础上新增了UDP负载均衡,现在几乎可以对任何应用进行负载均衡。上个月,我们在NGINX Open Source中的UDP负载均衡中新增了UDP负载均衡;在此版本中,我们将支持扩展至NGINX Plus,并增加了更多高级功能。NGINX Plus通过主动健康检查来监控UDP服务,提供丰富的统计数据以实现关键可见性,并支持动态添加和删除服务器。UDP通常用于非事务型轻量级协议,例如DNS(将域名解析为地址)、syslog(轻量级日志记录)和RADIUS(一种身份验证协议)。由于带宽要求较低,UDP也逐渐成为IoT应用的常用协议之一。NGINX Plus可以轻松交付这些现有和新兴应用,并对其进行负载均衡。
- 使用DNS
SRV记录进行服务发现:基于微服务的应用具有动态性,服务可按需扩容、缩容和迁移。要及时掌握服务的当前状态,一种有效的方法是使用服务发现。许多服务发现平台(如Consul和etcd (SkyDNS))都提供DNS接口,供NGINX Plus等客户端请求已发现服务的相关信息。服务使用的端口号通常是动态分配的。因此,服务发现平台会使用DNSSRV记录,其中包含端口号信息。NGINX Plus现已支持DNSSRV记录,并可通过DNS请求查询服务注册表,获取服务的位置,包括动态分配的端口信息。 - NGINX Plus App Pricing:为在业务高速增长、季节性流量或弹性流量场景下保持出色的性能和正常运行时间,许多应用都需要动态基础设施。这些应用通常还采用微服务或分布式架构,并使用容器或虚拟机作为运行环境。按实例数或机器使用时长支付软件费用,无法满足现代应用对灵活性和成本效益的要求。针对这些使用场景,我们推出了NGINX Plus App Pricing。只需按应用每年支付统一费率,即可不限量使用NGINX Plus的扩展功能和获得商业支持的二进制文件。无论虚拟机、容器、节点、并发连接或用户数量多少,全年只需支付一笔优惠费用。可根据需要,随时随地以任意方式在应用基础设施中部署NGINX Plus,并覆盖开发、测试、预发布、灾难恢复和生产环境;无需担心难以预测的按用量计费账单,也无需在突然扩容时等待获取许可证密钥。
NGINX Plus R9 功能详解
本节详细概述NGINX Plus R9中的所有新特性和功能。
动态模块
NGINX和NGINX Plus均采用模块化架构。第三方开发者和NGINX核心工程团队编写的模块均可扩展其核心功能。这些模块可添加关键功能,例如嵌入Lua脚本,以及根据IP地址确定用户的地理位置。目前提供超过100个第三方模块和超过60个NGINX官方模块。其中,基础nginx‑plus软件包包含56个模块,nginx‑plus‑extras软件包另含10个模块(完整列表请参阅NGINX Plus技术规格)。

在此版本中,nginx‑plus‑extras软件包中的其他模块(包括第三方模块和NGINX官方模块)也可以动态加载到NGINX Plus基础软件包nginx‑plus中。这样,您可以仅加载实际需要的其他模块。
这些模块已在NGINX Plus存储库中提供,我们计划在未来几个月内向该存储库添加更多模块。建议目前使用nginx‑plus‑extras软件包的用户迁移到核心nginx‑plus软件包,因为我们将在后续版本中弃用nginx‑plus‑extras软件包。
我们会先将每个动态模块加载到NGINX Plus核心中,再执行全面的版本测试,以确认该模块在未配置时不会干扰NGINX Plus正常运行。我们会跟踪模块更新,在每次发布新版本时提供新的构建版本;如果在两次版本发布之间收到严重安全问题报告,也会提供新的构建版本。
借助动态模块,我们可以分发一个包含通用功能的NGINX Plus二进制文件。管理员随后可按需选择要使用的其他模块。
如何在NGINX Plus中加载动态模块
要安装并动态加载模块,请执行以下步骤。以下步骤假定您已将软件包管理工具配置为从NGINX, Inc.获取文件,而不是从操作系统供应商的软件发行版中获取。
- 使用操作系统的标准软件包管理工具(例如
apt或yum)安装基础nginx‑plus映像以及要动态加载的模块(每个模块都需重复执行安装命令)。以下命令适用于基于Debian的系统。
# apt-get update# apt-get install nginx-plus
# apt-get install module-name- 在此版本中,可用于替换
module‑name的名称如下:系统会自动创建/etc/nginx/modules目录,其中包含指向所选模块的.so文件安装位置的符号链接。注意事项:nginx-plus-module-geoipnginx-plus-module-headers-morenginx-plus-module-image-filternginx-plus-module-luanginx-plus-module-passengernginx-plus-module-perlnginx-plus-module-rtmpnginx-plus-module-set-miscnginx-plus-module-xslt- 如果使用的是早期版本NGINX Plus的nginx‑plus‑extras软件包,则必须先将其移除,然后再安装R9版本的nginx‑plus软件包。对于基于Debian的系统,请使用以下命令:
# apt-get update# apt-get remove nginx-plus-extras
# apt-get install nginx-plus
# apt-get install module-name- 由于操作系统限制,某些模块不适用于特定操作系统版本。有关详细信息和模块说明,请参阅《NGINX Plus 技术规格》。
- 在/etc/nginx/nginx.conf的主(顶层)上下文中,为每个可动态加载的模块添加一条
load_module指令:
load_module modules/module-name.so;- 检查新配置的语法是否有效,然后重新加载NGINX Plus。
# nginx -t && nginx -s reload- nginx.conf 中列出的模块会动态加载到 NGINX Plus 中。
UDP负载均衡
上个月,我们发布了NGINX Open Source中的UDP负载均衡;NGINX Plus R9在此基础上增加了运行状况检查、扩展状态监控和动态重新配置功能。

与TCP负载均衡一样,UDP负载均衡的配置位于stream上下文中。与HTTP和TCP负载均衡类似,UDP负载均衡使用上游组来定义提供基于UDP的服务的一组源服务器,以及在这些服务器之间对流量进行负载均衡时使用的算法。
该配置还会为每个UDP端口定义一个虚拟服务器,并使用proxy_pass指令指定提供相关服务的上游组:
stream { upstream dns_upstreams {
least_time;
server dns-server-1-ip:53;
server dns-server-2-ip:53;
}
server {
listen 53 udp;
listen 53; #tcp
proxy_pass dns_upstreams;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
}此配置示例用于对DNS服务进行负载均衡。在upstream块中,我们配置了最短时间算法,使NGINX Plus将每个请求发送到当前“连接”数最少且响应最快的服务器。在server块中,我们同时侦听UDP和TCP流量,因为DNS可通过这两种协议运行。proxy_responses指令用于控制NGINX Plus从上游服务器收到多少个响应后,释放与UDP“连接”关联的资源。由于DNS采用简单的请求-响应协议,通常一个响应就足够了。
NGINX Open Source包含基本的UDP健康检查功能。如果上游UDP服务器未能在规定的超时时间内响应请求,或返回ICMP错误,NGINX和NGINX Plus将在规定的时间内停止向其发送流量。
NGINX Plus R9 新增了针对 UDP 服务的主动健康检查,类似于针对HTTP 和 TCP 流量的主动健康检查。您可以配置 NGINX Plus,使其向上游服务器发送特定的 UDP 请求,并定义服务器必须返回哪类响应才会被视为健康。由于 UDP 不具备 TCP 为 HTTP 提供的可靠传输机制,因此对于 UDP 应用,主动健康检查比对于 TCP 和 HTTP 应用更为重要。
借助NGINX Plus,还可以动态添加或移除上游服务器。例如,可以轻松将服务器下线进行维护,然后再将其重新加入负载均衡池。NGINX Plus的状态模块和实时活动监控仪表板新增了UDP相关统计信息,让您能够深入了解服务器的运行状况。
NGINX Plus R9可为常用的简单UDP应用提供负载均衡,包括DNS、RADIUS、syslog和NTP。目前尚不支持IP语音等长连接UDP协议及其他基于SIP的应用。
使用DNS SRV记录进行服务发现
现代Web应用由多个小型应用组件构成,包括Web服务器、应用服务器和数据库等。NGINX Plus等前端负载均衡器会检查传入流量,然后在各应用组件之间路由请求并进行负载均衡。
在虚拟平台或基于容器的平台上部署应用组件时,其IP地址和端口可能无法预知。服务发现是指本地客户端(例如前端NGINX Plus负载均衡器)查找这些组件,以便向其发送流量的过程。服务发现通常借助“服务数据库”实现,例如Consul、etcd或ZooKeeper。
在NGINX Plus R8中,我们发布了即时重新配置API的持久化版本,并分享了适用于Consul、etcd和ZooKeeper的演示解决方案。这些解决方案会检查服务数据库,并将配置更改推送到NGINX Plus。在NGINX Plus R9中,我们很高兴地宣布支持另一种使用DNS SRV查询的方法。DNS SRV查询会返回特定类型应用服务器的IP地址、端口、优先级和权重。
Consul和SkyDNS for etcd均提供DNS接口,客户端可通过这些接口检索SRV记录。NGINX Plus通过直接查询服务的DNS接口来获取负载均衡配置。NGINX Plus会定期重新检查服务,因此任何更改都能快速自动传播。
以下示例将NGINX Plus配置为通过DNS获取my_service的上游服务器列表。service=http参数用于server指令时,可启用对DNS SRV记录的支持。NGINX Plus现在可以自动发现为my_service提供支持的应用实例。
http { resolver dns-server-ip;
upstream my_service {
zone backend 64k;
server hostname-for-my_service service=http resolve;
}
server {
# ...
location /my_service {
# ...
proxy_pass http://my_service;
}
}
}NGINX Plus应用定价
按实例定价是开始使用NGINX Plus的理想方式,也是一种经济高效的硬件负载均衡器替代方案。不过,NGINX Plus的潜在用途远不止替代硬件。轻量级软件架构使NGINX Plus非常适合为每个应用提供专用负载均衡;此外,由于NGINX Plus基于NGINX Open Source构建,它还可以取代应用中的Web服务器和应用服务器。随着这些用例推动NGINX Plus部署不断增加,按实例定价对许多部署而言已不够经济高效,也不够灵活。
NGINX Plus R9推出全新的应用定价模式,针对特定应用,可按需运行任意数量的NGINX Plus实例。可根据需要,在应用基础设施中的任意时间、任意位置以任意方式部署NGINX Plus,并覆盖开发、测试、预发布、灾难恢复和生产环境。无论使用多少个虚拟机、容器或节点,全年均只需支付固定费用。
每项订阅均包含NGINX Plus软件的全部功能,以及我们屡获殊荣的 支持和配置协助。此外,选择应用定价模式还可享受:
- 可选择由NGINX Professional Services 提供的安装和/或调优支持
- 培训,帮助团队掌握NGINX基础知识、高级主题或两者兼顾
每个应用均可不限量使用。应用是指为单个Web应用或单独命名的桌面应用或移动应用提供支持的软件组件和团队。此模式已将基于微服务的架构及其他分布式架构纳入考量并予以支持。
此外,还提供站点许可证订阅,允许整个组织无限制使用NGINX Plus。
其他功能
NGINX Plus R9还引入了多项改进,包括:
- 缓存性能改进:去年,我们引入了线程池模型,以改进缓存读取操作,并防止这些操作可能阻塞NGINX核心。对于某些缓存工作负载,这可能带来9倍的性能提升。在此版本中,NGINX Plus还可以将缓存的磁盘写入操作卸载到线程。
- 通过TCP进行DNS查询。默认情况下,NGINX Plus使用UDP进行DNS查询。但是,当DNS响应较大时,例如一个名称解析到大量服务器,完整响应可能无法容纳在单个UDP数据报中(上限为512字节)。不完整的响应会被标记为已截断,NGINX Plus现在会立即使用TCP重试请求。这使NGINX Plus能够更好地支持超大规模的动态服务器部署。
- 重试非幂等请求:当HTTP请求因错误或超时而失败时,默认情况下,NGINX Plus会自动使用上游组中的另一台服务器重试该请求。可以使用
proxy_next_upstream指令定义NGINX Plus重试请求的错误类型,包括特定的4xx或5xx响应代码。按照惯例,通常不会重试POST请求,因为请求正文数据会以流式方式传输到服务器;如果服务器发生故障,则无法重新发送这些数据。但是,在某些故障情况下,早期版本的NGINX Plus会重试POST请求,这与非幂等请求不会重试的假设不一致。NGINX Plus不再自动重试失败的非幂等HTTP请求(POST、LOCK和PATCH)。要恢复之前的行为,并允许NGINX Plus尽可能重试失败的非幂等请求,请在proxy_next_upstream指令中添加新的non_idempotent参数。
升级或试用NGINX Plus
如果您正在运行NGINX Plus,强烈建议尽快升级到Release 9。升级后可获得多项修复和改进;如果需要提交支持工单,也有助于我们更好地为您提供支持。
如果尚未试用NGINX Plus,建议体验其Web加速、负载均衡和应用交付功能,也可将其用作提供全面支持的Web服务器,并通过API增强监控和动态重新配置。立即开始30天免费试用,亲自了解NGINX Plus如何帮助交付应用并实现横向扩展。
编辑注:有关NGINX Plus R9主要新功能的更多详细信息,请参阅以下相关资源。
- 使用NGINX和NGINX Plus对DNS流量进行负载均衡
- 使用DNS通过NGINX和NGINX Plus进行服务发现
- 使用Consul中的DNS SRV记录为NGINX Plus实现服务发现
- NGINX Plus R9 新增功能(点播网络研讨会)
关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
