[编辑 – 此文章已更新,引用了NGINX Plus API ,它取代并弃用了文章原始版本中讨论的单独的动态配置和状态模块。]
今天我们很高兴地宣布,所有 NGINX Plus 订阅者都可以免费升级到 NGINX Plus R12。 NGINX Plus 是一个高性能软件应用交付平台,包括负载均衡器、内容缓存和 Web 服务器。 NGINX Plus R12 是一个重要版本,其新功能专注于集群、定制和监控。
要了解有关 NGINX Plus R12 的更多信息,请观看我们的点播网络研讨会。
企业用户将受益于新的集群功能,该功能简化了管理 NGINX Plus 服务器高可用性集群的过程。 所有用户都将受益于对 nginScript 的官方支持,nginScript 是一种直接嵌入到 NGINX 配置中的轻量级高性能脚本语言。 监控和检测、缓存和健康检查的改进提高了应用的可靠性和性能。
nginx
进程。stale-while-revalidate
和stale-if-error
缓存扩展。 缓存重新验证可以在后台完成,这样用户就不必等待往返原始服务器的行程完成。进一步的增强功能包括为 TCP 服务提供客户端证书认证、检查 OAuth JWT 中的自定义字段的能力、对图像过滤器模块中的 WebP 格式的支持,以及许多性能和稳定性改进。
我们鼓励所有订阅者立即更新到 NGINX Plus R12,以利用此版本中的性能、功能和可靠性改进。 在执行更新之前,请务必查看下一节中列出的行为变化。
NGINX Plus R12 对默认行为和 NGINX Plus 内部结构进行了一些更改,您在升级时需要注意这些更改:
$ssl_client_s_dn
和$ssl_client_i_dn
变量的格式已改变。 逗号 ( ,
) 现在代替正斜杠 ( /
) 作为字段分隔符,并根据 RFC 进行转义2253和4514。 要继续使用带有正斜杠字段分隔符的X509_NAME_oneline
格式,请使用$ssl_client_s_dn_legacy
和$ssl_client_i_dn_legacy
变量。指令
告诉 NGINX Plus,如果上游服务器超载,则将连接排队。 由于 R12 中的内存和性能优化, queue
指令现在必须出现在指定负载平衡算法( hash
、 ip_hash
、 least_conn
或least_time
)的指令下方的上游
块中。NGINX Plus 服务器通常部署在两个或多个实例的集群中,以实现高可用性和可扩展性。 这样,您就可以通过使服务免受服务器故障的影响来提高服务的可靠性,还可以扩展和处理大量流量。
NGINX Plus 已经提供了一种支持方式,以主动-被动或主动-主动方式在集群中分配流量。 NGINX Plus R12 增加了一种跨集群同步配置的进一步支持方法。 此配置同步功能允许管理员从单一位置配置 NGINX Plus 服务器“集群”。 这些服务器共享其配置的公共子集。
同步配置的方法如下:
调用nginx-sync包中包含的配置同步进程nginx-sync.sh
来更新集群中的其他每台服务器(对等服务器)。 同步过程在每个对等点上执行以下步骤:
ssh
或rsync
将更新的配置推送到对等方。当 NGINX Plus 部署在一对容错服务器(或更多)中时,此功能特别有用。 您可以使用此方法简化集群内配置的可靠部署,或者将配置从暂存服务器推送到生产服务器集群。
有关详细说明,请参阅NGINX Plus 管理指南。
随着 NGINX Plus R12 的推出,我们很高兴地宣布 NGINX JavaScript 模块现已作为 NGINX 开源和 NGINX Plus 的稳定模块全面可用。 [该模块以前称为 nginScript,本文交替使用这两个名称。] nginScript 完全支持 NGINX Plus 订阅用户。
使用 nginScript,您可以使用复杂的逻辑记录自定义变量,控制上游选择,实现负载平衡算法,自定义会话持久性,甚至实现简单的 Web 服务。 我们将在接下来的几周内在我们的博客上发布其中一些解决方案的完整说明,并在它们可用时在这里添加它们的链接。
具体来说,NGINX Plus R12 包括以下增强功能:
endsWith
、 includes
、 repeat
、 startsWith
和trim
尽管 nginScript 已经稳定,但仍在努力支持更多的用例和 JavaScript 语言覆盖。 在我们的博客上了解更多信息,利用 NGINX JavaScript 模块 <.htmla> 为每个请求发挥 JavaScript 的强大功能和便利性。
NGINX Plus 中的监控和检测是一项重要的附加值功能,可让您深入了解 NGINX Plus 和上游应用的性能和行为。 统计数据通过我们的内置图形仪表板以及 JSON 格式提供,可以导出到您最喜欢的监控工具。
NGINX Plus R12 增加了许多改进:有关负载平衡服务器性能(响应时间)的更多信息、对 TCP 和 UDP 服务运行的洞察,以及一系列有助于排除故障以识别问题并调整 NGINX Plus 以优化性能的内部数据。
NGINX Plus R12 中的新统计数据包括:
200
意思是“成功”,502
表示“上游不可用”等等),并在$status
变量中报告它们。 NGINX Plus R12 在仪表板中添加了一系列列,以显示 TCP 和 UDP 虚拟服务器的响应代码计数,就像已经为 HTTP 虚拟服务器提供的响应代码计数一样。 伪状态代码也可以被记录下来,以便与现有的日志分析工具集成。nginx_build
(例如, nginx-plus-r12
),并将 NGINX 开源版本号报告为nginx_version
(例如,1.11.10
)。 仪表板在主选项卡左上角的框中显示两个值。上游主机名– 在 JSON 数据中,服务器
字段通过 IP 地址和端口标识上游组中的服务器。 新的名称
字段将第一个参数报告给上游
配置块中的服务器
指令,该参数可以是域名或 UNIX 域套接字路径以及 IP 地址和端口。 在仪表板上,上游和TCP/UDP 上游选项卡上最左侧的名称列现在报告名称
字段的值,而不是服务器
字段的值(在 NGINX Plus R11 及更早版本中报告)。
如果您使用 DNS 名称(尤其是解析为多个 IP 地址的名称)定义 JSON 数据和仪表板,则新指标可以更轻松地将 JSON 数据和仪表板与您的上游服务器关联起来。
扩展状态数据中的共享内存区域利用率——共享内存区域配置有固定大小,并且很难选择一个既不太大(内存已分配但从未使用)也不太小(内存已耗尽且缓存项目被丢弃)的大小。
指标中的新仪表提供了每个共享区域内存使用情况的详细内部报告,使您能够监控内存使用情况,并为 NGINX 技术支持提供更明智的建议,以优化 NGINX 配置。
log_format
指令中定义一个 JSON 模板,该指令的新可选escape
参数强制执行符合 JSON 标准的转义,以便日志行格式正确。有关详细信息,请参阅实时活动监控。
NGINX Plus R12 显著增强了 NGINX Plus 缓存引擎。
NGINX Plus R12 增加了对RFC 5861中定义的Cache-Control
扩展、 stale-while-revalidate
和stale-if-error
的支持。 您现在可以配置 NGINX Plus 以遵守这些Cache-Control
扩展,并继续从缓存中提供过期资源,同时在后台刷新它们,而不会增加客户端请求的延迟。 类似地,如果上游服务器不可用,NGINX Plus 可以从缓存中提供过期资源——这是一种在微服务应用中实现断路器模式的技术。
除非配置为忽略Cache-Control
标头,否则 NGINX Plus 会尊重来自原始服务器的陈旧
计时器,这些计时器返回符合 RFC 5861 的Cache-Control
标头,如下例所示:
缓存控制:最大年龄=3600 重新验证时过期=120 错误时过期=900
要启用对具有后台刷新功能的Cache-Control
扩展的支持,请包含突出显示的指令:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { # ... location / { proxy_cache my_cache; # 更新时提供过时内容proxy_cache_use_stale changing ; # 此外,不要阻止触发更新的第一个请求 # 并在后台进行更新proxy_cache_background_update on ; proxy_pass http://my_upstream; } }
proxy_cache_use_stale
更新指令指示 NGINX Plus 在更新内容时提供过时的版本。 如果仅包含该指令,则第一个请求过时内容的用户将支付“缓存未命中”惩罚 - 也就是说,直到 NGINX Plus 从原始服务器获取并缓存它时才会收到内容。 在内容更新期间,随后请求过时内容的用户将立即从缓存中获取该内容,而第一个用户将得不到任何内容,直到获取并缓存更新的内容为止。
使用新的proxy_cache_background_update
指令,所有用户(包括第一个用户)都会收到过时的内容,而 NGINX Plus 会在后台刷新它。
新功能还可在FastCGI 、 SCGI和uwsgi模块中使用。
对缓存引擎的进一步增强使 NGINX Plus 能够绕过缓存,以处理在未缓存文件启动后启动超过配置的字节数的字节范围请求。 这意味着对于视频内容等大型文件,对文件深处字节范围的请求不会增加客户端请求的延迟。 在早期版本的 NGINX Plus 中,客户端直到 NGINX Plus 从文件开头获取到请求的字节范围内的所有内容并将其写入缓存后才收到请求的字节范围。
新的proxy_cache_max_range_offset
指令指定了从文件开头的偏移量,NGINX Plus 将字节范围请求直接传递到原始服务器,并且不缓存响应。 ( FastCGI 、 SCGI和uwsgi模块中也提供新功能。)
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_cache my_cache; # 绕过超过 10 MB 的字节范围请求的缓存proxy_cache_max_range_offset 10m ; proxy_pass http://my_upstream; } }
这些增强功能进一步巩固了 NGINX Plus 作为高性能、符合标准的缓存引擎的地位 - 适用于任何环境,从加速应用交付到构建成熟的内容交付网络(CDN)。
NGINX Plus R12 进一步增强了 NGINX Plus 的主动健康检查能力。
随着容器化环境和自动扩展应用组的日益普及,负载均衡器必须实施主动的应用级健康检查,并允许新服务器有时间在加速之前初始化内部资源。
在 NGINX Plus R12 之前,当您将新服务器添加到负载平衡池(使用NGINX Plus API或 DNS)时,NGINX Plus 会立即认为它是健康的,并立即向其发送流量。 当您将新的强制
参数包含在health_check
指令( HTTP或TCP/UDP )中时,新服务器必须通过配置的健康检查,NGINX Plus 才能向其发送流量。 当与慢启动功能结合时,新参数可以为新服务器提供更多时间连接到数据库并“预热”,然后再被要求处理其全部流量份额。
上游 my_upstream { 区域 my_upstream 64k; 服务器 backend1.example.com slow_start=30s ; } 服务器 { 位置 / { proxy_pass http://my_upstream; # 要求新服务器在接收流量之前通过健康检查 health_check强制; } }
这里包括health_check
指令的强制
参数和服务器
指令 ( HTTP或TCP/UDP ) 的slow_start
参数。 使用 API 或 DNS 接口添加到上游组的服务器被标记为不健康,在通过健康检查之前不会接收任何流量;此时它们开始在 30 秒内接收逐渐增加的流量。
对 UDP 服务器实施应用级健康检查与对 HTTP 和 TCP 服务器实施应用程序级健康检查同样重要,这样生产流量就不会发送到功能不齐全的服务器。 NGINX Plus 支持 UDP 的主动健康检查,但在 NGINX Plus R12 之前,您必须创建一个匹配
块来定义要发送的
数据和期望
的响应。 当使用二进制协议或具有复杂握手的协议时,确定正确的值可能具有挑战性。 对于此类应用,NGINX Plus R12 现在支持 UDP 的“零配置”健康检查,可测试应用的可用性,而无需您定义发送和期望字符串。 将udp
参数添加到health_check
指令以进行基本的 UDP 健康检查。
上游 udp_app { 服务器 backend1.example.com:1234; 服务器 backend2.example.com:1234; } 服务器 { 监听 1234 udp; proxy_pass udp_app; # 基本 UDP 健康检查health_check udp ; }
SSL 客户端证书通常用于对受保护网站的用户进行身份验证。 NGINX Plus R12 在现有的 HTTP 支持中添加了对受 SSL 保护的 TCP 服务的身份验证支持。 这通常用于机器对机器的身份验证,而不是最终用户登录,并且使您能够在负载均衡第 4 层协议时使用 NGINX Plus 进行 SSL 终止和客户端身份验证。 示例包括对与 MQTT 协议进行通信的 IoT 设备进行身份验证。
$ssl_client_verify
变量现在包含失败的客户端身份验证事件的附加信息。 其中包括“证书撤销”和“过期”等原因。
$ssl_client_i_dn
和$ssl_client_s_dn
变量的格式已更改,以符合 RFC2253和4514。 有关更多详细信息,请参阅行为变化。
NGINX Plus R10 为 OAuth 2.0 和OpenID Connect用例引入了原生 JSON Web Token (JWT) 支持。 NGINX Plus 的主要用例之一是验证 JWT、检查其中的字段并将它们作为 HTTP 标头传递给后端应用。 通过将令牌验证卸载到 NGINX Plus 并通过读取 HTTP 标头来使用用户身份,应用可以轻松参与 OAuth 2.0 单点登录 (SSO) 环境。
NGINX Plus R10 及更高版本可以检查 JWT 规范中定义的字段。 NGINX Plus R12 扩展了 JWT 支持,以便 JWT 中的任何字段(包括自定义字段)都可以作为 NGINX 变量访问,从而进行代理、记录或用于做出授权决策。
如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到 Release 12。 您将获得大量修复和改进,如果您需要提出支持单,它将帮助我们为您提供帮助。 您可以在客户门户上找到安装和升级说明。
在继续升级之前,请参考上面描述的行为变化。
如果您尚未尝试过NGINX Plus ,我们鼓励您尝试使用它来实现 Web 加速、负载均衡和应用交付,或者将其作为具有增强监控和配置管理API 的完全支持的 Web 服务器。 您可以立即免费开始30 天评估,亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”