宣布 NGINX Plus R19

我们很高兴地宣布 NGINX Plus 版本 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 和/或 upload_conf 指令,则在升级到 R19 的过程中,您必须将它们替换为 api 指令。

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

  • 支持新操作系统 –

    • 阿尔卑斯3.10
    • Debian 10(“Buster”)
    • Ubuntu 19.04(“迪斯科”)
  • 不再支持旧版操作系统 –

    • Debian 8(“杰西”)
    • Ubuntu 14.04(“值得信赖”)
    • Ubuntu 18.10(“宇宙”)

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

新功能详细信息

新功能让监控更加灵活

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

每个位置指标

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

以下配置支持对整个网站以及对以 /admin/ 开头的 URI 的所有请求进行指标收集。

然后您可以在 http/location_zones 端点访问指标。

$ 卷曲 http://localhost:8080/api/5/http/location_zones
{
“www_管理员”:{
“请求”:3393,
“回应”:{
“1xx”:0,
“2xx”:3307,
“3xx”:81,
“4xx”:5,
“5xx”:0,
“总计”:3393
},
“丢弃”:0,
“已收到”:15403,
“已发送”:835227
}
}

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

DNS 解析器指标

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

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

$curl http://localhost:8080/api/5/resolvers
{
“内部DNS”:{
“要求”: {
“姓名”:132,
“服务”:0,
“地址”:0
},
“回应”:{
“无错误”:130,
“前”:0,
“服务失败”:0,
“nx域”:0,
“notimp”:0,
“拒绝”:0,
“超时”:2,
“未知”:0
}
}
}

实时活动监控仪表板更新

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

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

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

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

Prometheus 监控的新模块

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

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

  • 安装 Prometheus-njs 模块。
  • 配置 NGINX Plus API。
  • 在 NGINX Plus 配置文件中配置 Prometheus 指标收集的专用位置。

  • 通过在 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”

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

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

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

    NGINX Plus 写入日志条目,清楚地标记为针对每个超出给定速率限制的请求进行试运行。在我们对日志的分析中,我们可以按区域字段过滤条目,以确定哪个速率限制为我们提供了所需的行为。

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

    以下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,您可以为任何单个条目使用不同的超时来覆盖默认超时(通过超时参数为整个键值存储设置)。各个超时可以大于或小于默认值。

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

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

    以下 JSON 表示 localhost (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,每个指令的参数可以是变量而不是静态值,从而实现带宽的动态控制h 使用基于请求的属性。

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

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

    TCP/UDP 流量的 proxy_download_rate 和 proxy_upload_rate 指令现在也接受可变参数。

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

    NGINX Plus 生态系统更新

    NGINX JavaScript 模块

    NGINX JavaScript 模块 (njs) 已更新至版本 0.3.5。最显着的增强(从以前的版本累积)是:

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

    升级或试用 NGINX Plus

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

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

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


    评论

    发表回复

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