我们很高兴地宣布NGINX Plus Release 24 (R24) 已经推出。 NGINX Plus 基于 NGINX 开源,是唯一集 Web 服务器、负载均衡器、反向代理、内容缓存和 API 网关于一体的软件。
NGINX Plus R24的新功能包括:
完善此版本的功能包括,在配置重新加载时可选保留强制性健康检查的结果和 cookie 标志的动态值。
正如NGINX Plus R23发布时宣布的那样,第三方 Cookie‑Flag 模块已被弃用,并将从NGINX Plus R26中的动态模块库中删除。 该模块中定义的set_cookie_flag
指令被proxy_cookie_flags
指令取代。 我们建议您尽快用proxy_cookie_flags
指令替换配置中的所有set_cookie_flag
指令。 另请参阅动态 Cookie 标志。
适用于Amazon Linux 2 的 NGINX Plus 包现在依赖于 OpenSSL 1.1 ,它启用 TLS 1.3 并通过许多其他方式增强安全性。 将 Amazon Linux 2 系统升级到NGINX Plus R24时,请确认系统上使用 OpenSSL 的其他软件仍能与 OpenSSL 1.1 正常配合使用。
我们重新组织了 NGINX Plus 软件包存储库,从而改变了安装过程。
存储库组织的变化反映了我们的产品组合和依赖 NGINX Plus 的产品生态系统的扩展。 特别是对于 NGINX Plus, pkgs.nginx.com/ plus repo 取代了旧的plus-pkgs.nginx.com repo。
当您安装和升级 NGINX Plus 时,操作系统的包管理器( apt
、 yum
或同等软件)会配置 NGINX Plus 的软件存储库。 在配置为使用plus-pkgs.nginx.com repo 的现有系统上,您需要更新包管理器以引用pkgs.nginx.com/plus (加上指示操作系统的最终路径元素)。
有关将现有系统升级到NGINX Plus R24的说明,请参阅F5 知识库。 有关初始安装的更新说明,请参阅 NGINX Plus 管理指南中的安装 NGINX Plus 。
随着HTTP/3 标准接近完成以及 HTTP/2 的使用量增加,我们简化了长连接的配置方式。 在NGINX Plus R24及更高版本中,以前仅适用于 HTTP/1.1 的配置指令也适用于 HTTP/2。 您不再需要仅仅因为协议版本不同而对相同功能使用不同的指令。
过时的指令 | 替代指令 |
---|---|
http2_idle_timeout |
keepalive_timeout |
http2_max_field_size http2_max_header_size |
large_client_header_buffers |
http2_max_requests |
keepalive_requests |
http2_recv_timeout |
client_header_timeout |
在 NGINX Plus R23 及更高版本中, lingering_close
、 lingering_time
和lingering_timeout
指令适用于 HTTP/2 和 HTTP/1.1。 使用这些指令配置更有效的 HTTP/2 连接处理可以提高 NGINX Plus 的整体 HTTP/2 功能。
NGINX Plus R24 以一种重要方式修改了这些指令的效果并消除了一个潜在的错误:如果空闲工作连接池耗尽,NGINX Plus 不仅会开始关闭保持活动连接,还会开始关闭处于延迟关闭模式的连接。
当上游服务器的健康状态发生变化时,NGINX 会将条目写入错误日志- 这是监控和分析基础设施整体健康状况的重要工具。 对于 HTTP 和 TCP/UDP(流
)上游服务器,记录状态变化的严重性级别已经改变:
健康
到不健康的
变化记录在警告
级别(原为信息
)。从不健康
到健康的
变化记录在通知
级别(原为信息
)。JSON Web Tokens ( JWT ) 的使用持续增长。 此前,NGINX Plus 支持签名令牌( RFC 7515中定义的 JSON Web 签名 [JWS] 标准),它为令牌中编码的声明提供数据完整性。 然而,JWS 不提供声明的机密性——任何有权访问令牌的组件都可以读取它们。 TLS/SSL 减轻了传输过程中令牌的暴露,但存储在 Web 浏览器和其他客户端中的令牌仍然会暴露。
NGINX Plus R24 引入了对加密令牌( RFC 7516中定义的 JSON Web 加密 [JWE] 标准)的支持,该令牌为整个声明集提供机密性和数据完整性。 现在可以将敏感信息或个人身份信息 (PII) 编码到 JWT 中,而不会存在数据被不安全的客户端泄露的风险。
NGINX Plus R24 及更高版本支持签名和加密的 JWT。 签名令牌是默认的,不需要明确配置。 新的auth_jwt_type
指令配置 JWT 加密。
您可以在由auth_jwt_key_file
指令命名的 JWT 密钥文件中定义加密(或签名)算法和密钥使用情况。 NGINX Plus R24及更高版本支持以下加密方法。
JWE 密钥管理算法 |
|
JWE 内容加密算法 |
|
NGINX Plus R24 标志着 NGINX JavaScript 模块 (njs) 开发的一个重要里程碑,目前0.5.3。 有两个重要的增强功能使您能够使用自定义解决方案扩展 NGINX Plus 以适应各种用例:
如果您不熟悉 NGINX JavaScript 模块,请阅读我们博客上的这个介绍<.htmla>。
[本节中描述的用例只是 NGINX JavaScript 模块的众多用例中的一部分。 有关完整列表,请参阅NGINX JavaScript 模块的用例。 ]
作为 API 网关或反向代理部署的 NGINX Plus 最强大的功能之一是响应过滤,它涉及根据正则表达式匹配拦截来自上游服务器的响应并替换响应正文、标头或两者中的字符串。 对于未使用 NGINX JavaScript 模块处理的流量,在Substitution模块中实现响应过滤。
NGINX Plus R24 在 NGINX JavaScript 模块中引入了响应过滤的单独实现,其中两个指令使您能够利用 JavaScript 的强大功能来分析和修改响应主体和标头。 JavaScript 将检查和操作的可能性扩展到了基于正则表达式的简单字符串替换之外,甚至比使用替换模块具有更强大的响应过滤功能。
js_body_filter
指令过滤响应主体使用js_body_filter
指令,您可以使用 JavaScript 检查和修改来自代理服务器的响应主体。 用例包括:
在此示例中,我们扫描响应中查找任何看起来像 AWS 访问密钥的内容,并用屏蔽值替换任何此类出现的内容。
要执行此代码,我们只需引用相关位置
块内的maskAwsKeys
函数。
js_header_filter
指令过滤响应标头您可以使用js_header_filter
指令来检查——甚至拦截和修改——响应标头的内容。 考虑一个后端服务器,它发出许多Set-Cookie
标头,其中包含敏感信息,但对于正确操作至关重要。 NGINX Plus 能够拦截响应,读取Set-Cookie
标头并将其保存在键值存储中。 可以创建一个替换的Set-Cookie
标头作为对键值存储的引用,并将其注入原始响应中。
js_header_filter
与键值存储的交互在 NGINX Plus 配置的第 4-5 行,我们定义了键值存储:
然后在第 12-13 行,我们用键值存储的内容替换参考 cookie,并使用我们的 JavaScript 代码拦截任何新的 cookie。
JavaScript 代码会遍历每个新的Set-Cookie
响应标头并创建一个新的键值条目来存储它。
API 网关的主要用例是控制对特定资源的访问。 NGINX Plus 支持第 7 层针对 HTTP 请求的一组强大的身份验证和访问控制功能,但现代 API 实现也利用 TCP/UDP 作为底层协议,这带来了新的身份验证挑战。
使用内置的 NGINX JavaScript ngx.fetch
函数,您现在可以在 TCP/UDP 连接的上下文中实例化一个简单的 HTTP 客户端。 这使得可以使用基于 HTTP 的身份验证服务在流
上下文中进行访问控制,例如在代理数据库连接时调用本地 OpenPolicy Agent 守护程序。
此示例演示如何使用端口 8085 上的本地 HTTP 身份验证服务来验证每个新连接。 js_access
指令和ngx.fetch
函数一起在新实例化的 HTTP 上下文中实现功能,类似于基于子请求结果的客户端授权(由常规 HTTP 请求的auth_request
指令实现)。 根据Response
对象中可用的 HTTP 状态代码,允许 ( s.allow
) 或拒绝 ( s.deny
) 与后端数据库的连接。
笔记: ngx.fetch
函数可与 NGINX JavaScript HTTP 模块以及 NGINX JavaScript Stream 模块配合使用,但与 HTTP 模块中的r.subrequest
对象相比具有明显的局限性。 对于大多数 HTTP 用例, r.subrequest
是首选,因为它提供对 TLS 连接、缓存和代理模块中所有功能的支持。
当使用set
[ HTTP ][ Stream ]或js_set
[ HTTP ][ Stream ]指令定义 NGINX 变量时,当请求处理遇到重定向时,该值可能会被覆盖。 新的js_var
[ HTTP ][ Stream ]指令允许 JavaScript 函数评估变量,并且其值可以在重定向后保持不变。
新的njs.on
对象使得当 njs虚拟机退出时执行 JavaScript 函数。 例如,这可用于在 TCP 连接结束时执行某项功能。
Stream 会话对象的新s.status
属性提供对整体会话状态的访问(请参阅$status
了解可能的值)。
F5 Device ID+ 是一种实时、高精度的设备识别器,它利用先进的信号收集和成熟的机器学习算法为访问您站点的每台设备分配一个唯一的标识符。 部署很简单,可以为您的安全、网络、欺诈和数字团队带来直接的益处。 了解访问您的应用的独特设备从未如此简单。
有关在 NGINX Plus 实例上激活F5 设备 ID+的说明,请参阅使用F5 设备 ID+减轻欺诈和风险。
当每个用户访问您的网站时, F5 Device ID+都会利用 JavaScript 收集有关浏览器、设备操作系统、硬件和网络配置的信息。 这些属性被输入到基于 F5 Shape 业界认可的 AI 和机器学习功能构建的F5 Device ID+服务中。 数据被实时处理,并且为设备分配唯一的标识符,除非它已经是已知设备。 对于退回的设备,可以记录、学习和研究行为、动作和其他属性,以减少欺诈并为已知良好用户提供顺畅的体验。
强制性健康检查用于启用使用NGINX Plus API或通过 DNS 解析添加的上游服务器的慢启动。 它们确保首先对新节点进行健康检查,然后在准备好接收流量时进行慢速启动。
以前,重新加载配置后,上游服务器会被视为不健康,无论重新加载之前的状态如何。 因此,服务器直到通过第一次强制检查后才会接受客户端请求。
使用 NGINX Plus R24,您可以将强制 HTTP 运行状况检查标记为持久检查,以便在重新加载配置时记住其先前的状态。 将持久
参数与强制
参数一起添加到health_check
指令。
在 NGINX Plus 的先前版本中,我们引入了proxy_cookie_flags
指令作为设置 cookie 标志的本机方法。 NGINX Plus R24通过启用 cookie 标志的动态值扩展了此功能。 这使得特定的 cookie 标志能够由 NGINX 变量控制。
笔记: proxy_cookie_flags
指令弃用了 Cookie‑Flag 模块,该模块将在NGINX Plus R26中删除。 请参阅已弃用的 Cookie‑Flag 模块。
此示例使用映射在方案为https而非http时启用安全
cookie 标志。
如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到NGINX Plus R24 。 您还将获得一些额外的修复和改进,当您需要提出支持单时,它将帮助 NGINX 为您提供帮助。
如果您还没有尝试过 NGINX Plus,我们鼓励您尝试一下 – 为了安全、负载均衡和 API 网关,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您今天就可以开始享受30 天免费试用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”