我们很高兴地宣布NGINX Plus Release 19(R19)现已推出。 NGINX Plus 是唯一集负载均衡器、内容缓存、Web 服务器和 API 网关于一体的服务器。 NGINX Plus 基于 NGINX 开源,包含独有的增强功能和屡获殊荣的支持。 该版本的主要重点是监控,其新功能使其更加细化和灵活,从而增强了应用的大规模可靠性。
NGINX Plus R19的新功能包括:
位置
块的可选单独指标收集、有关 DNS 查找活动的新指标以及对 Prometheus 格式和 JSON 的导出支持。 NGINX Plus 仪表板显示新的每个位置指标,并为 DNS 指标和有关 NGINX Plus 集群的指标提供了新的选项卡。过时的 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 的建议和帮助,请参阅我们博客上的过渡指南,或联系我们的支持团队。
支持的新操作系统–
不再支持旧版操作系统–
有关支持平台的更多信息,请参阅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/位置的请求包含查询字符串时,它会收集单独的指标。
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访问。
有两个重命名的选项卡和两个新选项卡:
位置
块和服务器
块的指标。要探索新的仪表板,请访问https://demo.nginx.com/ 。
NGINX Plus API以 JSON 格式返回指标,这是一种与外部监控和应用性能管理 (APM) 解决方案集成的常用且方便的格式。 您现在还可以导出 Prometheus 格式的指标,这在 Kubernetes 环境中特别流行。
Prometheus-njs模块公开 Prometheus 指标。 要启用导出的指标:
在 NGINX Plus 配置文件中为 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_rate
和proxy_upload_rate
指令现在也接受变量参数。
对于更复杂的带宽限制,您可以使用脚本扩展(例如NGINX JavaScript 模块 (njs))来实现高级自定义逻辑,以确定给定连接的适当带宽限制。
NGINX JavaScript 模块(njs)已更新至版本 0.3.5 。 最显著的增强功能(从以前的版本累积而来)包括:
进程
对象(对于读取环境变量特别有用)String.prototype.trim
函数如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到NGINX Plus R19 。 您还将获得许多额外的修复和改进,当您需要提出支持单时,它将帮助 NGINX 为您提供帮助。
在继续升级之前,请仔细查看本博客文章中描述的新功能和行为变化。
如果您还没有尝试过 NGINX Plus,我们鼓励您尝试一下 – 为了安全、负载均衡和 API 网关,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您今天就可以开始享受30 天免费评估服务。 亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”