博客 | NGINX

宣布推出 NGINX Plus R19

NGINX-F5-horiz-black-type-RGB 的一部分
Liam Crilly 缩略图
利亚姆·克里利
2019 年 9 月 3 日发布


我们很高兴地宣布NGINX Plus Release 19(R19)现已推出。 NGINX Plus 是唯一负载均衡器、内容缓存、Web 服务器和 API 网关于一体的服务器。 NGINX Plus 基于 NGINX 开源,包含独有的增强功能和屡获殊荣的支持。 该版本的主要重点是监控,其新功能使其更加细化和灵活,从而增强了应用的大规模可靠性。

NGINX Plus R19的新功能包括:

  • 更灵活的监控——我们添加了新功能,可以更细粒度地洞察和更轻松地分析您的 NGINX Plus 生态系统,包括位置块的可选单独指标收集、有关 DNS 查找活动的新指标以及对 Prometheus 格式和 JSON 的导出支持。 NGINX Plus 仪表板显示新的每个位置指标,并为 DNS 指标和有关 NGINX Plus 集群的指标提供了新的选项卡。
  • 用于测试速率限制的试运行模式——为生产流量设置正确的速率限制非常困难且非常危险——如果设置错误,可能会严重影响很大一部分用户的用户体验。 通过新的试运行模式,您可以了解速率限制对生产流量的影响,而无需实际应用它们。
  • 键值存储的增强- 您现在可以将 IP 地址范围与单个地址一起存储在键值存储中,并为单个条目设置到期时间。
  • 动态带宽控制——配置带宽限制时,您现在可以将速率设置为变量,从而能够根据传入流量的任何属性应用不同的限制。

行为方面的重要变化

  • 过时的 API - NGINX Plus R13 (于 2017 年 8 月发布)引入了全新的NGINX Plus API,用于指标收集和上游组的动态重新配置,取代了之前实现这些功能的 Status 和 Upstream Conf API。 正如当时宣布的那样,弃用的 API 仍然可用,并在相当长的一段时间内受到支持,直到NGINX Plus R16才结束。 如果您的配置包含status和/或upper_conf指令,则必须在升级到 R19 的过程中将它们替换为api指令。

    有关迁移到新NGINX Plus API 的建议和帮助,请参阅我们博客上的过渡指南,或联系我们的支持团队。

  • 支持的新操作系统

    • Alpine 3.10
    • Debian 10(“Buster”)
    • Ubuntu 19.04(“Disco”)
  • 不再支持旧版操作系统

    • Debian 8(“Jessie”)
    • Ubuntu 14.04(“Trusty”)
    • Ubuntu 18.10(“宇宙”)

有关支持平台的更多信息,请参阅NGINX Plus动态模块的技术规范。

新功能详情

新功能使监控更加灵活

NGINX Plus R19使监控更加灵活,扩展了您可以收集的指标类型和分析它们的方式。

每个位置的指标

NGINX Plus API提供了广泛的实时监控指标,当您在其server{}块中包含status_zone指令时,包括有关虚拟服务器的几个计数器。 使用NGINX Plus R19,您现在可以通过向这些位置块添加status_zone指令来收集除了父server{}块之外(或代替父 server{} 块)的各个位置块的指标。 通过这种更细粒度的监控,您可以更快地检测到网站中产生错误的确切部分,从而更有效地进行故障排除。

以下配置可启用整个网站的指标收集,以及对以/admin/开头的 URI 的所有请求的指标收集。

然后,您可以通过http/location_zones端点访问这些指标。

$ curl http://localhost:8080/api/5/http/location_zones { “www_admin”:{ “请求”: 3393,"响应":{"1xx": 0,“2xx”: 3307, "3xx": 81,“4xx”: 5、“5xx”: 0,“总计”: 3393 }, “丢弃”: 0,“已收到”: 15403,“已发送”: 835227 } }

也可以将status_zone指令放在if块内,但请注意,对于给定位置,指标仅计算一次,并且从请求处理期间遇到的最后一个status_zone指令开始。 以下配置扩展了前面的示例,当对/admin/位置的请求包含查询字符串时,它会收集单独的指标。

DNS 解析器指标

NGINX Plus API也已扩展,包含用于跟踪 DNS 查找活动的指标,特别是有关 DNS 请求类型和响应状态。 要收集有关 NGINX Plus 查询名称查找的一组 DNS 服务器的指标,请将status_zone参数添加到resolver指令。

然后,您可以在解析器端点访问这些指标。

$ curl http://localhost:8080/api/5/resolvers { “internal_dns”:{ “请求”:{ “名称”: 132,"srv": 0,"地址": 0 }, “响应”: { “无错误”: 130,“前任”: 0,“服务失败”: 0,“nxdomain”: 0,“notimp”: 0,“拒绝”: 0,“超时”: 2、“未知”: 0 } } }

实时活动监控仪表板更新

NGINX Plus 实时活动监控仪表板提供了一个方便的集中位置,用于跟踪NGINX Plus API收集的指标。仪表板已在NGINX Plus R19中扩展,以包含上面讨论的新解析器和每个位置指标。 此外,它现在还报告与集群中运行时状态共享相关的指标(通过区域同步模块启用),这些指标以前只能通过NGINX Plus API访问。

有两个重命名的选项卡和两个新选项卡:

  • HTTP 区域服务器区域选项卡的新名称。 该选项卡现在显示有关位置块和服务器块的指标。
  • HTTP UpstreamsUpstreams选项卡的新名称。 当 HTTP 和 TCP/UDP 模块都配置时,这可以提供清晰度。
  • 新的“Cluster”选项卡显示有关 NGINX Plus 集群中状态共享的指标。
  • 新的解析器选项卡显示有关 DNS 查找活动的指标。

要探索新的仪表板,请访问https://demo.nginx.com/

NGINX Plus 实时活动监控仪表盘截图

Prometheus 监控新模块

NGINX Plus API以 JSON 格式返回指标,这是一种与外部监控和应用性能管理 (APM) 解决方案集成的常用且方便的格式。 您现在还可以导出 Prometheus 格式的指标,这在 Kubernetes 环境中特别流行。

Prometheus-njs模块公开 Prometheus 指标。 要启用导出的指标:

  1. 安装Prometheus-njs模块
  2. 配置NGINX Plus API
  3. 在 NGINX Plus 配置文件中为 Prometheus 指标收集配置一个专用位置。

  4. 通过在 Prometheus 配置文件的scrape_config部分中指定 NGINX Plus 实例的网络地址,配置 Prometheus 从 NGINX Plus 获取指标。

在试运行模式下测试速率限制

NGINX Plus 提供了一种非常灵活的速率限制方法。 可以同时跟踪和执行多个速率限制。 执行本身有五种不同的形式 - 包括延迟过多的请求、直接拒绝请求、在执行之前允许大量不受限制的请求 - 以及这些行为的组合。 有关详细解释,请参阅我们的博客

虽然这种灵活性可以实现高度精细的速率限制,但您首先如何确定适合您的流量的速率限制? 如何提前判断您的计划速率限制是否太高(在这种情况下您的服务器可能会不堪重负)或太低(在这种情况下用户体验可能会受到影响)?

最好的信息来源是 NGINX Plus 错误日志,当 NGINX Plus 延迟或拒绝请求时,会创建如下详细条目:

2019/09/03 11:42:12 [错误] 57#57: *339 限制请求,超出: 0.600 按区域“my_limit”,客户端: 172.17.0.1,服务器:www.example.com,请求: “GET / HTTP/1.1”,主机:“www.example.com:80”

该条目会告诉您一些有用的信息,例如此请求代表的配置速率每毫秒超过多少个请求(超额字段)、超出的特定限制(区域字段)以及客户端的 IP 地址(客户端字段)。 但只有在您实际实施流量限制之前获得这些信息,它对于规划目的仍然有用。

NGINX Plus R19通过“试运行”模式添加了这种预测功能,以实现速率限制。 日志条目正常创建,但不强制执行速率限制。 要启用空运行模式,请将新的limit_req_dry_run指令包含在与limit_req指令相同的块中。

在以下示例中, limit_req_zone指令定义了四种不同的速率限制,从每秒 10,000 个请求到每秒 10 个请求。 我们在根位置块 (第 9-12 行) 中使用limit_req指令应用这些速率,并使用limit_req_dry_run指令来禁用执行。

对于每个超过给定速率限制的请求,NGINX Plus 都会写入一条日志条目,并用dry run清楚地标记。 在我们对日志的分析中,我们可以通过区域字段过滤条目,以确定哪个速率限制可以给我们所需的行为。

2019/09/03 11:56:26 [错误] 142#142: *22282 限制请求,试运行,超额: 1.000 按区域“1000rs”,客户端: 172.17.0.1,服务器:www.example.com,请求: “GET / HTTP/1.1”,主机:“www.example.com:80”

键值存储的增强

借助 NGINX Plus 的内存键值存储,您可以使用NGINX Plus API根据请求的属性动态配置流量管理。 示例用例包括IP 地址的动态拒绝名单动态带宽限制身份验证令牌的缓存

支持网络范围

NGINX Plus R19通过在现有的对单个 IP 地址的支持中添加对 IP 网络范围(子网)的支持来扩展键值存储。 这意味着键值存储中的单个条目可以匹配网络范围内的所有 IP 地址,从而简化配置并节省您的时间,因为您不必单独添加组成范围的地址。 键值存储使用CIDR 符号来表示网络范围。 例如,192.168.13.0/24 代表地址 192.168.13.0 至 192.168.13.255。 支持 IPv4 和 IPv6 地址和范围。

要启用网络范围,请将新的type=ip参数包含在keyval_zone指令中,如以下 IP 地址动态拒绝名单配置中所示。 当 NGINX Plus 执行查找时,键值存储中存储的网络范围内的任何 IP 地址都会返回匹配项。

第 2 行指定通过在拒绝列表键值存储中执行查找来评估$in_denylist变量,使用$remote_addr (客户端 IP 地址)作为键。 当客户端 IP 地址位于拒绝列表中时,简单的if块(第 8-10 行)会拒绝请求。

以下curl命令调用NGINX Plus API为上述网络范围在键值存储中创建一个条目。

$ curl -X POST -d '{"192.168.13.0/24":"1"}' http://localhost:8080/api/5/http/keyvals/denylist

每个条目的过期超时

在上一节中, denylist.conf第 1 行的keyval_zone指令的timeout=24h参数意味着拒绝列表键值存储中的每个条目在创建 24 小时后过期(并从存储中删除)。

使用NGINX Plus R19 ,您可以为任何单个条目设置不同的超时来覆盖默认超时(由timeout参数为整个键值存储设置)。 单个超时时间可以大于或小于默认值。

要创建具有非默认超时的条目,请提供具有两个字段的 JSON 对象作为值:

  • – 在本例中设置为所需值1填充$in_denylist变量
  • expire – 设置为创建后过期的毫秒数

以下 JSON 表示本地主机 (127.0.0.1) 的拒绝列表条目,该条目将在 1 小时(3,600,000 毫秒)后过期。

{
“127.0.0.1”:{
“值”: "1",
"到期": 3600000
}
}

以下curl命令在键值存储中创建该条目:

$ curl -X POST -d '{"127.0.0.1":{"value":"1","expire":3600000}}' http://localhost:8080/api/5/http/keyvals/denylist

动态带宽控制

limit_rate指令设置 NGINX Plus 向 HTTP 请求发送响应的速率(每秒的字节数), limit_rate_after指令设置 NGINX Plus 在应用该限制之前发送的字节数。 使用NGINX Plus R19 ,每个指令的参数可以是变量而不是静态值,从而能够根据请求的属性动态控制带宽使用情况。

以下示例配置根据客户端使用的 TLS 版本设置带宽,从而有效地奖励响应速度更快的更多现代浏览器。

在以前的 NGINX Plus 版本中,您可以通过设置$limit_rate变量来限制带宽;我们建议您使用这种更简化的方法。 有关详细信息,请参阅limit_rate指令的文档。

TCP/UDP 流量的proxy_download_rateproxy_upload_rate指令现在也接受变量参数。

对于更复杂的带宽限制,您可以使用脚本扩展(例如NGINX JavaScript 模块 (njs))来实现高级自定义逻辑,以确定给定连接的适当带宽限制。

NGINX Plus 生态系统的更新

NGINX JavaScript 模块

NGINX JavaScript 模块(njs)已更新至版本 0.3.5 。 最显著的增强功能(从以前的版本累积而来)包括:

  • 支持箭头函数(感谢洪志道 [Hong Zhi Dao] 和 Artem S. Povalyukhin)
  • 全局进程对象(对于读取环境变量特别有用)
  • String.prototype.trim函数

升级或尝试 NGINX Plus

如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到NGINX Plus R19 。 您还将获得许多额外的修复和改进,当您需要提出支持单时,它将帮助 NGINX 为您提供帮助。

在继续升级之前,请仔细查看本博客文章中描述的新功能行为变化

如果您还没有尝试过 NGINX Plus,我们鼓励您尝试一下 – 为了安全、负载均衡和 API 网关,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您今天就可以开始享受30 天免费评估服务。 亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”