NGINX Plus R22 正式发布

NGINX | 2020年6月09日

我们很高兴地宣布,NGINX Plus Release 22 (R22)现已发布。NGINX Plus基于NGINX Open Source构建,是一款集软件负载均衡器、内容缓存、Web服务器和API网关于一体的解决方案。此版本主要侧重于监控和身份验证,可提高大规模应用的精细化管理能力和韧性。

NGINX Plus R22 的新增功能包括:

重要行为变更

新功能详解

客户端证书的OCSP验证

NGINX Plus支持双向TLS。双向TLS使用客户端证书来验证连接客户端的身份,并建立加密连接。双向TLS可高度确保客户端身份的可信度,但管理已吊销的证书可能会增加管理负担。在线证书状态协议(OCSP)通过在客户端证书提交时验证其状态来解决这一问题。

可以配置NGINX Plus使用OCSP检查X.509客户端证书的有效性,具体定义请参见RFC 6960。

要启用SSL客户端证书的OCSP验证,请同时添加新的ssl_ocsp指令和用于启用证书验证的ssl_verify_client指令。

正在加载代码示例…

除非使用ssl_ocsp_responder指令定义其他URI,否则NGINX Plus会将OCSP请求发送到客户端证书中嵌入的OCSP URI。

要在所有工作进程共享的单个内存区域中缓存OCSP响应,请添加ssl_ocsp_cache指令,以定义该区域的名称和大小。响应默认缓存1小时,除非OCSP响应中的nextUpdate值指定了其他时长。

客户端证书验证结果可通过$ssl_client_verify变量获取,其中包括OCSP失败的原因。

如果客户端证书不受信任或OCSP响应无效,TLS握手将失败。系统会返回状态代码495 (SSL 证书 错误),并在错误日志中创建一条严重性级别为error的条目:

YYYY/MM/DD hh:mm:ss [error] 31222#0: *5 certificate status "revoked" in the OCSP response while requesting certificate status, responder: 127.0.0.1

OpenID Connect 增强功能

我们的OpenID Connect参考实现适用于NGINX Plus,可将SSO扩展到新应用和现有应用,从而降低复杂性和成本。该参考实现结合使用NGINX Plus功能和NGINX JavaScript模块(njs),与授权端点执行代码交换,并从IdP接收ID令牌。ID令牌缓存在NGINX Plus键值存储中,同时向客户端发送不透明会话令牌。随后,客户端通过提供有效的会话令牌进行身份验证;NGINX Plus使用该令牌验证ID令牌,验证通过后,客户端才能访问后端应用。

此版本对OIDC参考实现进行了多项增强,并带来两项重要变更:

  1. 该配置现在支持多个IdP,具体方式是将入站请求中的相应输入变量传递到多个map块中。这种额外的灵活性减少了修改OIDC参考实现代码的需要。
  2. JavaScript代码现已采用模块形式实现,因此可与同一主机上的其他njs解决方案共存,无需在单个文件中管理所有njs代码。

以下是一个配置示例:

正在加载代码示例…

每个map块都允许使用多个值,从而支持多个IdP和身份验证参数(客户端密钥、JWK密钥文件、授权端点)。此处使用$host变量作为输入参数,但也可以指定从请求标头派生的任何变量。

NGINX Plus API现在可跟踪与OpenID Connect登录相关的活动,以便进行监控和故障排除。有关OpenID Connect参考实现的更多信息,请参阅GitHub存储库。

速率限制和连接数限制实时仪表盘图表

DDoS攻击和暴力密码猜测攻击是应用面临的两大严重威胁。可以通过速率限制来减轻其影响,即使用NGINX Plus限制每个客户端在特定时间段内可发出的请求数量。

NGINX Plus R20 为NGINX Plus API新增了对请求速率限制和连接限制的实时监控(通过端点/api/version/http/limit_reqs和/api/version/http/limit_conns)。这些信息现已显示在NGINX Plus实时活动监控仪表板上,其中累计计数以表格形式显示,带时间戳的计数以图表形式显示:

  • 请求速率限制指标显示在“Limit Req”表中,该表位于“HTTP Zones”选项卡上
  • 连接限制指标显示在Limit Conn选项卡的TCP/UDP Zones表中

对于由 limit_req_zone 和 limit_conn_zone 指令定义的每个区域,表中均包含一行。要显示图表,请单击该行最左侧的图表图标。

展开后的图表会持续更新,并以堆叠面积图的形式显示各时间间隔的值。可通过以下方式自定义显示的信息:

  • 选择要显示的时间范围:1 分钟、5 分钟或 15 分钟
  • 将鼠标悬停在图表上,可显示某个时间点的精确计数
  • 将鼠标悬停在图例区域中的某个统计类型上,即可在图表中突出显示该统计类型
  • 单击图例区域中的统计类型,可切换显示或隐藏该统计类型
  • 左右拖动图表以查看历史数据

在默认的1秒仪表盘更新间隔下,每个图表可存储约30分钟的历史数据。延长仪表盘更新间隔(降低更新频率)可增加可用的历史数据量。请注意,仪表盘图表不会持久保存;离开或重新加载该选项卡时,历史数据将丢失。

NGINX JavaScript Module 增强功能

The NGINX JavaScript module扩展了NGINX Plus的功能,支持广泛的使用场景,包括更精细地控制流量、整合跨应用的JavaScript函数,以及抵御安全威胁。NGINX JavaScript module已更新至0.4.1,并包含以下功能:

  • 新增的js_import指令,用于导入多个实现 location 和变量处理程序的模块文件
  • 改进了对标头的支持,包括新增的原始标头对象
  • 可以在njs代码中使用TypeScript定义文件
  • 支持将外部值转换为原生JavaScript对象

以下代码和配置说明了如何使用新的r.rawHeadersIn对象,在遇到错误时记录客户端发送的完整标头集。[编辑注:这只是NGINX JavaScript模块的众多用例之一。有关完整列表,请参阅《NGINX JavaScript模块用例》。]

正在加载代码示例…

正在加载代码示例…

以下是404响应的示例日志条目:

$ curl http://localhost/bogus
$ tail --lines=1 /var/log/nginx/access_json.log
{"response":{"timestamp":"YYYY-MM-DDThh:mm:ss+TZ_offset","status":404},"request":{"client":"127.0.0.1","uri":"/bogus","headers":[["Host","localhost:80"],["User-Agent","curl/7.64.1"],["Accept","*/*"]]}}

身份验证失败时延迟

为缓解时序攻击(例如密码暴力破解攻击和凭据填充),可让NGINX Plus在身份验证失败时延迟响应。新的auth_delay指令用于指定延迟时间,可应用于由Auth Basic、Auth JWT和Auth Request模块处理的身份验证请求。

升级或试用 NGINX Plus

如果您正在运行NGINX Plus,强烈建议尽快升级到NGINX Plus R22。升级后还可获得多项其他修复和改进,并有助于NGINX在您需要提交支持工单时提供帮助。

如果您尚未体验过NGINX Plus,建议试用一下。它可用于安全防护、负载均衡和API网关,也可作为获得全面支持的Web服务器,并提供增强的监控和管理API。立即开始30天免费试用,亲自了解NGINX Plus如何帮助您交付应用并实现扩展。


分享

关于作者

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。