我们很高兴地宣布NGINX Plus Release 21 (R21)现已推出。 NGINX Plus 基于 NGINX 开源,是唯一集负载均衡器、内容缓存、Web 服务器和 API 网关于一体的套件。 超过4.5 亿个网站依赖 NGINX , NGINX Plus R21比以往更加可靠和安全,主要专注于 NGINX 开源的错误修复和稳定性改进。
NGINX Plus R21的新功能包括:
Host
标头的客户端请求。高效的软件和代码质量是我们构建 NGINX(开源和 NGINX Plus)的核心原则。
NGINX 团队采用了所有商业软件所具备的现代 CI/CD 和自动化测试工具。 每日检测 活跃开发分支的“缺陷密度”非常低,每 1000 行代码仅有 0.01 个缺陷,而类似大小的代码库的平均密度为每 1000 行 0.7 个缺陷。
我们还委托外部和独立的渗透测试和代码审查来审查开源和 NGINX Plus 组件。 最新的渗透测试和代码审查发现了几个问题,并在此版本中进行了解决。
总的来说, NGINX Plus R21修复了 14 个错误:
aio
指令中使用子请求时发生套接字泄漏494
被退回,而不是400
当代码出现错误时494
使用error_page
指令进行重定向重写
指令,则在启动或重新配置期间可能会发生分段错误break
指令与alias
指令一起使用,或者与带有 URI 的proxy_pass
指令一起使用,则工作进程中可能会发生分段错误Transfer-Encoding
请求标头Location
响应标头行可能包含垃圾信息error_page
指令返回重定向时,带有正文的请求被错误处理debug_points
指令中的错误请注意,这些错误都不是严重的,并且没有相关的 CVE 记录。
在发布此版本时,我们正在努力制定 2020 年路线图。 今年晚些时候,我们预计将推出HTTP/3 (又名 QUIC)的生产级实现。 如果您有兴趣关注或测试这项技术,请留意未来几周的实验补丁。
NGINX Plus R15引入了对将 gRPC 流量路由和负载均衡到上游组的支持。 您可以通过包含grpc_pass
指令来利用 NGINX Plus 来路由 gRPC 流量。
NGINX Plus R21在grpc_pass
指令中引入了变量支持,以提供扩展到 gRPC 工作负载的动态、API 驱动的路由策略。 这使得满足以下用例成为可能:
以下配置是调试路由的示例实现。
在第 1 行中,我们定义了一个可以使用网络范围作为键的键值存储(由type=ip
参数启用)。 第 2 行指定通过在grpc-greeter键值存储中执行查找来评估$greeter_upstream
变量,使用客户端 IP 地址( $remote_addr
)作为键。
在第 10 行,我们指定grpc://$greeter_upstream
作为grpc_pass
指令的参数,用于基于客户端的 IP 子网的 TLS 终止和 gRPC 请求的动态路由。
例如,您可以在 NGINX Plus 实例上运行以下命令,将来自 192.168.80.0/24 子网的请求路由到grpc-servers-greeter-debug :
$ curl -iX POST -d '{"192.168.80.0/24":"grpc-servers-greeter-debug"}' http://localhost:8080/api/6/http/keyvals/grpc-greeter
要将 gRPC 流量切换到生产服务组( grpc-servers-greeter-prod ),请运行以下命令:
$ curl -iX PATCH -d '{"192.168.80.0/24":"grpc-servers-greeter-prod"}' https://localhost:8080/api/6/http/keyvals/grpc-greeter
NGINX JavaScript 模块 (njs) 已更新至0.3.9 版本,修复了几个错误并增强了一些与子请求和文件系统支持相关的功能。
r.subrequest
函数使 njs 代码能够向任何 URI 发出异步 HTTP 请求。这有许多可能的用例,一个值得注意的例子是对外部身份验证服务器的 API 调用,例如OAuth 2.0 令牌自检。 此版本为子请求带来了两个重要的增强功能:承诺和分离子请求。
[编辑器– 以下两个示例用例只是 NGINX JavaScript 模块的众多用例中的一部分。 有关完整列表,请参阅NGINX JavaScript 模块的用例。 ]
子请求通常包括处理子请求响应的回调函数。 现在可以省略回调函数,使用 JavaScript 承诺作为与调用代码内联处理响应的方式。 下面的示例说明了如何在不使用回调的情况下将连续的子请求在单个代码序列中链接在一起。
子请求是异步的,以前必须从js_content
指令调用它们。 现在,子请求也可以在变量评估期间从js_set
指令触发。 这些“分离的”子请求仍然异步工作,但不会向调用函数返回任何数据,并且任何响应都会被忽略。
如果交换的数据总量超过 1 MB,以下示例代码将使用分离子请求将请求标头的副本发送到安全信息和事件管理 ( SIEM ) 系统。
[编辑器– 以下配置已更新为使用js_import
指令,该指令取代了NGINX Plus R23<.htmla> 中的js_include
指令。 有关详细信息,请参阅 NGINX JavaScript 模块 - 这 示例配置 部分显示了 NGINX 配置和 JavaScript 文件的正确语法。]
然后,当我们写入访问日志时,通过要求变量评估在日志阶段执行 JavaScript 代码。
JavaScript 文件系统对象fs
已得到增强,以支持异步操作的承诺。 此外,还有新的文件系统方法: access()
、 realpath()
、 symlink()
和unlink()
。
如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到NGINX Plus R21 。 您还将获得许多额外的修复和改进,当您需要提出支持单时,它将帮助 NGINX 为您提供帮助。
在继续升级之前,请仔细查看本博客文章中描述的新功能和行为变化。
如果您还没有尝试过 NGINX Plus,我们鼓励您尝试一下 – 为了安全、负载均衡和 API 网关,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您今天就可以开始享受30 天免费试用。 亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”