博客 | NGINX

宣布推出 NGINX Plus R10

NGINX-F5-horiz-black-type-RGB 的一部分
欧文·加勒特缩略图
欧文·加勒特
2016 年 8 月 23 日发布


[编辑– NGINX Plus 的NGINX ModSecurity WAF模块于2022 年 4 月 1 日正式停止销售,并将于2024 年 3 月 31 日停止使用。 有关更多详细信息,请参阅我们博客上的“F5 NGINX ModSecurity WAF 正在过渡到终止使用<.htmla>”。]

我们很高兴地宣布 NGINX Plus Release 10(R10),这是我们迄今为止最重要的版本。 NGINX Plus 通过先进的功能和屡获殊荣的支持扩展了 NGINX 开源,为客户提供了完整的应用交付解决方案。 在此版本中,我们提供了许多新功能,以显著提高 NGINX Plus 交付的应用的安全性和性能,以及用于改进网络集成和支持通过脚本定制 NGINX Plus 的附加功能。

[编辑– 有关 NGINX Plus R10 中主要新功能的更多详细信息,请参阅以下相关资源:

]

NGINX Plus R10 是我们Web应用防火墙 (WAF)的初始版本,由 ModSecurity 提供支持,并得到 NGINX, Inc. 的全力支持。 据 Akamai 称,过去一年中,Web应用攻击增加了 50%, DDoS 攻击增加了一倍多。 现在每个应用都面临着遭受攻击的风险。 NGINX ModSecurity WAF 有助于保护 Web应用免受恶意用户的侵害,并为客户提供一种多功能工具来帮助保护他们的应用程序和数据的安全。

使用 NGINX Plus R10 版本中包含的 NGINX ModSecurity WAF 保护您的应用。
NGINX ModSecurity WAF 阻止入侵者

NGINX ModSecurity WAF基于新的ModSecurity 3软件并在 NGINX Plus 中本地运行。 它在我们的动态模块存储库中作为额外付费选项提供,并由 NGINX, Inc. 提供支持,并且已经通过 NGINX Plus 进行了全面测试。 我们正在与Trustwave合作,并将在添加功能、提高性能和解决任何问题时维护经过测试的更新。

另外两个新功能进一步增强了 NGINX Plus 的安全功能:

  • JSON Web Tokens – 我们的许多客户使用 NGINX Plus 作为API 网关,并要求我们提供一种通用且标准的方式来验证 NGINX Plus 层对 API 的访问。 为了满足这一需求,我们在此版本中添加了使用 JSON Web Tokens (JWT) 进行身份验证的支持。

    NGINX Plus 现在可以在允许客户端访问 API 之前验证 JWT。 此功能使应用管理员能够使用开放标准保护对其 API 的访问,从而避免供应商锁定在专有标准上。 本机 JWT 支持还通过将身份验证操作(例如符合 OAuth 2.0 的 OpenID Connect 令牌的验证)从应用服务器转移到 NGINX Plus 来降低应用管理员的复杂性。

  • ECC 和 RSA 证书的“双栈”支持- 使用 NGINX Plus R10,您可以使用 RSA 和 ECC 证书发布 SSL/TLS 服务。 NGINX Plus 根据每个客户端的功能选择最佳证书,允许现代客户端使用更高速的 ECC 证书,同时仍然支持仅限 RSA 的传统客户端。 ECC 证书的速度比同等强度的 RSA 证书最高可提高 3 倍;这意味着每个服务器拥有更多的 SSL/TLS 连接,并且 SSL/TLS 握手速度更快。

除了安全功能外,NGINX Plus R10 还包括:

  • 透明代理支持——尽管许多现代 HTTP应用可以配置为依赖X-Forwarded-For标头,但一些旧式应用和其他 TCP 或 UDP 服务会引用事务的源 IP 地址以进行日志记录、安全或身份验证。

    NGINX Plus 现在可以“欺骗”它转发到上游服务器的HTTPTCP 连接以及 UDP 数据报的源 IP 地址和端口。 这可用于提供IP 透明度,即 NGINX Plus 使用远程客户端的 IP 地址发送数据包的配置,以便上游服务器将数据包视为来自该地址,而不是 NGINX Plus 服务器上的本地 IP 地址。 此功能还可用于启用基于 UDP 协议的直接服务器返回。

  • NGINX JavaScript 模块支持——NGINX JavaScript 模块是 NGINX 和 NGINX Plus 的下一代配置和控制语言,让用户可以对其应用的交付和保护方式进行深度和细粒度的控制。 在此预览版中,NGINX JavaScript 模块增强了您对 HTTP、TCP 和 UDP 流量的控制,生成响应并做出精确的决策以将请求路由到最佳服务器。
  • TCP 和 UDP 负载均衡的进一步改进——Stream 模块的扩展增加了对更多NGINX 变量的支持、使用map指令的计算、使用split_clients指令的 A/B 测试支持、 GeoGeoIP操作以及选择性路由( proxy_pass指令的变量参数)。 这些扩展使您能够创建更复杂的 TCP 和 UDP 负载均衡策略,由 NGINX 配置语言和新的 NGINX JavaScript 集成驱动。

NGINX Plus R10 详细信息

NGINX ModSecurity Webapplication防火墙

NGINX Plus R10 中的头条功能是我们 WAF 的初始版本,它基于著名且值得信赖的ModSecurity技术构建。 自 2002 年首次发布开源版本以来,ModSecurity 一直致力于保护世界上一些最大的网络资产免受恶意用户的攻击。 它通常被称为安全领域的“瑞士军刀”。 NGINX ModSecurity WAF是一个额外付费选项,通过我们的动态模块存储库提供给订阅者。

NGINX ModSecurity WAF 是帮助保护关键应用安全的必备解决方案。 它为不灵活且昂贵的硬件设备(例如 F5、Citrix 和 Imperva 提供的设备)提供了一种经济高效的替代方案,同时还以软件的灵活性超越了它们的功能。 NGINX ModSecurity WAF 可以部署在任何环境中——本地服务器、公共云、私有云和混合云。

NGINX ModSecurity WAF 保护您的网站和应用免受 DDoS 攻击
NGINX ModSecurity WAF 有助于防御 DDoS 攻击

WAF 在“规则”数据库上运行,该数据库定义要阻止和/或记录的恶意行为。 OWASP ModSecurity 核心规则集(CRS)是 ModSecurity 使用最广泛的规则集之一。 NGINX ModSecurity WAF 使用 OWASP CRS 来识别和阻止各种应用攻击,具有以下功能:

  • 第 7 层攻击防护– 保护您的应用免受各种攻击,例如 HTTP 违规、SQL 注入、XSS、RFI 和 LFI 攻击等。
  • DDoS 缓解– 通过缓解和减轻复杂的应用级 DDoS 攻击和僵尸网络的影响来保持持续正常运行时间。
  • 实时拒绝列表——通过拒绝来自已知恶意 IP 地址的流量来自动阻止已知恶意用户。
  • PCI-DSS 6.6 合规性– 开始遵守 PCI-DSS 6.6 要求,以实现安全的在线交易。
  • 审计日志——使用详细日志中的信息更快地对攻击和其他异常应用流量做出响应。

不同的供应商(例如TrustWave )也可以提供不同价格水平的附加规则集。 此外,您可以使用强大的 ModSecurity 规则语言来定义您自己的自定义规则,以增强您正在使用的任何规则集。

NGINX ModSecurity WAF 的支持由 NGINX, Inc. 直接提供。 我们的支持团队可以帮助安装、配置和调试 WAF 和 OWASP 核心规则集的问题。

NGINX ModSecurity WAF 作为 NGINX Plus 存储库中的动态模块提供,您可以使用标准包管理工具进行安装。 这些命令适用于基于 Debian 的操作系统:

# apt-get 更新# apt-get 安装 nginx-plus # apt-get 安装 nginx-plus-module-modsecurity

请注意,只有购买了 NGINX ModSecurity WAF 模块的订阅者以及请求访问权限的订阅者和评估者才可以下载nginx-plus-module-modsecurity包。

要加载 NGINX ModSecurity WAF 模块,请在 NGINX Plus 配置文件的顶级“main”上下文中包含load_module指令:

要使用 NGINX Plus 启用 NGINX ModSecurity WAF,请包含modsecurity指令以及modsecurity_rules_file指令来指定规则集:

然后重新加载 NGINX Plus 配置:

# nginx -t && nginx -s 重新加载

OAuth 2.0 和 OpenID Connect 的原生 JWT 支持

NGINX Plus R10 原生支持 JSON Web Token (JWT) 身份验证标准,可轻松向您的应用和 API 添加复杂的身份验证解决方案。

JWT(发音为“jot”)令牌在RFC 7519中定义,是OpenID Connect标准中用户信息的底层数据格式,该标准是 OAuth 2.0 协议之上的标准身份层。 API 和微服务的部署者也因为 JWT 的简单性和灵活性而转向它。

[编辑– 有关利用本机 JWT 支持的用例,请参阅以下博客:

]

为了给 API 提供身份验证服务,NGINX Plus R10 验证了 JWT
NGINX Plus 在允许客户端访问之前验证 JWT

作为反向代理负载均衡器,NGINX Plus 位于应用前端,通过卸载每个 HTTP 请求中提供的 JWT 验证,可以简化应用开发。 这有两个好处。 首先,NGINX Plus 可以帮助阻止未经身份验证、格式错误和恶意的请求到达应用,从而保护它免受处理此类请求所涉及的工作量和风险。

第二个好处是 NGINX Plus 可以访问经过验证的 JWT 中的所有字段(经过签名验证后),并且可以利用其配置语法的固有功能和灵活性为微服务和 API 提供复杂的身份验证解决方案:

  • 微服务的典型用例是让 NGINX Plus 验证 JWT 并将经过身份验证的用户的身份作为 HTTP 标头提供给后端应用。 这样就无需在每个微服务中一遍又一遍地实现相同的身份验证功能。
  • 对于 API,NGINX Plus 可以根据真实的每个用户限制访问速率,而不是依赖于 IP 地址到最终用户的近似映射。

以下示例 NGINX Plus 配置代码片段展示了如何使用 JWT 来保护网站。

auth_jwt指令告诉 NGINX Plus 使用 JWT 来验证对域发出请求的用户,在本例中为 myrealmauth_jwt_key_file指令指示使用哪个 JSON Web Key (JWK) 来验证令牌签名;其功能类似于 SSL/TLS 加密中的公钥。 NGINX Plus 必须可以访问该文件位置。

当 NGINX Plus 验证和解析令牌时,它会自动为 JWT 中的“声明”创建 NGINX 变量,这些变量代表与其相关的实体(例如,其发行者、发行给的用户以及预期的接收者)。 变量名称均以$jwt_claim_开头。 然后,您可以使用add_header指令让 NGINX Plus 将声明以 HTTP 标头的形式传递给后端服务器,该 HTTP 标头设置为$jwt_claim_变量的值。 在我们的示例中,NGINX Plus 将用户身份通过​​ $jwt_claim_sub变量传递给后端应用,该变量对应于 JWT 中的用户 ID( sub声明)。

NGINX Plus R8中我们发布了 OAuth2 支持的技术预览版。 在 NGINX Plus R10 实施中,我们采纳了客户的反馈,提供可用于生产的实施,以满足在复杂的用户和计算机身份验证领域中最有价值的用例。

“双栈” RSA 和 ECC 证书支持

现在有很多理由开始使用 SSL/TLS 加密所有应用流量。 Google 会奖励使用 SSL/TLS 加密的网站更高的搜索引擎排名。 此外,现代网络标准(例如 HTTP/2)要求所有网站都使用 SSL/TLS 加密。

使用 NGINX Plus R10,您可以使用 RSA 和 ECC 证书发布 SSL/TLS 服务。 在我们的测试中,ECC 证书比同等强度的 RSA 证书快 3 倍;这意味着每个服务器有更多的 SSL/TLS 连接和更快的 SSL/TLS 握手。 NGINX Plus 根据每个客户端的功能选择最佳证书,允许现代客户端使用更高速的 ECC 证书,同时仍然支持仅支持 RSA 的传统客户端。

为了同时支持 RSA 和 ECC 证书,在虚拟服务器的配置中只需为每种证书类型包含一对ssl_certificatessl_certificate_key指令,如下例所示。

透明代理

我们不断为 NGINX Plus 添加功能,例如TCPUDP负载均衡,以支持更广泛的应用和部署模型。 在 NGINX Plus R10 中,我们添加了透明代理功能,允许 NGINX Plus 使用任何源 IP 地址和端口将数据包发送到上游服务器。 这可以启用 IP 透明度和直接服务器返回等配置。

IP 透明度是一种配置,其中负载均衡器(NGINX Plus)使用远程客户端的 IP 地址作为其发送到上游服务器的数据包中的源 IP 地址。 这意味着上游服务器将数据包视为来自远程客户端的 IP 地址,而不是来自负载均衡器上的本地 IP 地址。 当应用出于日志记录、安全、速率限制或身份验证目的引用源 IP 地址时,这一点非常重要。

IP 透明度也是称为直接服务器返回(DSR) 的网络负载平衡技术的基础。 NGINX Plus 可以对基于 UDP 的协议(但不是 TCP 或 HTTP)执行 DSR,从而允许返回数据包完全绕过负载均衡器并直接到达远程客户端。

NGINX Plus 在其版本 r10 中支持直接服务器返回,即服务器直接回复客户端
在DSR模式下,后端服务器直接响应客户端

IP 透明度和 DSR 使用proxy_bindfastcgi_bindmemcached_bindscgi_binduwsgi_bind指令的新透明参数进行配置。 以下示例显示如何为 DNS 后端设置 DSR。 proxy_responses指令指定 NGINX Plus 不需要查看任何服务器响应(零是 DSR 的适当值)。

请注意,启用 DSR 时被动健康检查无效,因为它们涉及 NGINX Plus 验证服务器是否向客户端发送了响应。 对于 DSR 配置来说,配置主动应用感知健康检查是强制性的。 例如,请参阅我们关于为负载平衡 DNS 服务器配置它们的详细说明

IP 透明度和 DSR 配置很复杂,还有额外的路由和数据包重写要求,超出了 NGINX Plus 软件的范围。 有关完整说明,请参阅我们博客上的使用 NGINX 和 NGINX Plus 作为透明代理实现 IP 透明度和直接服务器返回

适用于基于 HTTP、TCP 和 UDP 的applications的 NGINX JavaScript 模块

[编辑器– NGINX JavaScript 模块以前称为 nginScript。 该模块在 NGINX Plus R12(和 NGINX 1.11.10)中已普遍可用。

有关其他 NGINX JavaScript 模块用例的详细探索,请参阅NGINX JavaScript 模块的用例

本节中的代码已更新为使用js_import指令,该指令取代了 NGINX Plus R23 及更高版本中的js_include指令。 有关更多信息,请参阅NGINX JavaScript 模块的参考文档 -示例配置部分展示了 NGINX 配置和 JavaScript 文件的正确语法。 ]

NGINX Plus R10 包含我们新 NGINX JavaScript 配置语言的预览版。 它还没有完成功能,我们欢迎对迄今为止的工作提出任何反馈。 NGINX JavaScript 使您能够使用 JavaScript 代码对 HTTP、TCP 和 UDP 流量执行复杂和自定义的操作。 它为控制应用的交付和保护方式提供了一种强大的新方法。 使用 NGINX JavaScript,您可以:

  • 使用强大的 JavaScript 编程语言直接在 NGINX Plus 中编写“无服务器”函数
  • 格式化、操作和转换 API 数据
  • 提供简单的TCP服务,例如时间服务器
  • 使用 JavaScript 设置 NGINX 变量,创建自定义负载平衡决策、缓存键等

NGINX JavaScript 预览版可在我们的动态模块存储库中获取。 您可以使用标准包管理工具来安装它。 这些命令适用于基于 Debian 的操作系统:

# apt-get 更新# apt-get 安装 nginx-plus # apt-get 安装 nginx-plus-module-njs

要加载用于 HTTP 和 TCP/UDP 的 NGINX JavaScript 模块,请在 NGINX Plus 配置文件的顶级“主”上下文中包含load_module指令:

然后重新加载 NGINX Plus 配置以加载 NGINX JavaScript 模块:

# nginx -t && nginx -s 重新加载

NGINX 开源用户可以从我们的开源源代码存储库获取 NGINX JavaScript。

JavaScript 代码不直接包含在 NGINX Plus 配置中。 相反,它是使用js_import指令读取的。 在此示例中,从/etc/nginx/conf.d/functions.js读取了简单“无服务器”功能的 JavaScript 代码。 js_content指令指示 NGINX Plus 调用 JavaScript 函数并将结果返回给客户端。

/etc/nginx/conf.d/functions.js中的 JavaScript 代码使用指定的字符集填充字符串:

其他功能

NGINX Plus R10 引入了许多其他改进,以帮助您完美地交付应用,其中包括:

  • Stream模块中实现的 TCP/UDP 负载均衡现在与 HTTP 负载均衡具有更大的功能对等性。 新支持的模块包括用于 A/B 测试的拆分客户端、根据客户端地理位置采取行动的GeoIP以及基于 IP 地址定义变量的Geo 。 通过附加的 NGINX 变量可以获得更多信息,并且您可以使用变量作为proxy_pass指令的参数来执行路由决策。
  • 高流量应用的一个常见问题是短暂的端口耗尽,由于操作系统用完了可用的端口号,因此无法创建与上游服务器的新连接。 为了解决这个问题,NGINX Plus 现在使用IP_BIND_ADDRESS_NO_PORT套接字选项(如果可用)。 此选项允许重新使用源端口来与上游服务器建立传出连接,前提是标准“4 元组”(源 IP 地址、目标 IP 地址、源端口、目标端口)是唯一的。 它适用于 Linux 内核版本 4.2 及更高版本以及glibc 2.22 及更高版本的系统。
  • NGINX Plus 为每个新的 HTTP 请求自动生成新变量$request_id ,有效地为请求分配一个唯一的“事务 ID”。 这有助于应用跟踪并将 APM 功能引入日志分析工具。 交易 ID 被代理到后端应用和微服务,以便系统的所有部分都可以为每个交易记录一致的标识符。
  • proxy_request_bufferingfastcgi_request_bufferingscgi_request_bufferinguwsgi_request_buffering指令现在可与 HTTP/2 配合使用,并可用于切换请求缓冲。
  • 新的http2_body_preread_size指令允许 HTTP/2 客户端立即开始发送请求正文。 该指令控制 NGINX Plus 开始读取客户端请求正文之前使用的缓冲区的大小。

NGINX Plus Extras 软件包已弃用

正如我们在 NGINX Plus R9 发布时预先宣布的那样,R10 是包含 NGINX Plus Extras 包的最后一个版本。

我们强烈建议您现在修改您的安装和配置程序以使用nginx-plus包并动态加载您实际使用的nginx-plus-extras包中的模块。 从 NGINX Plus R11 开始,这将是使用未内置于nginx-plus包中的模块的唯一可能方法。

要切换到nginx-plus包和动态模块,请执行以下步骤:

  1. 删除nginx-plus-extras包并安装nginx-plus和您想要使用的动态模块。 对于基于 Debian 的系统,适当的命令集是:

    # apt-get 更新# apt-get 删除 nginx-plus-extras # apt-get 安装 nginx-plus # apt-get 安装模块名称
  2. /etc/nginx/nginx.conf中的主(顶层)上下文中,为每个动态加载的模块添加一个load_module指令:

  3. 检查新配置的语法有效性并重新加载:

    # nginx -t && nginx -s 重新加载

升级或尝试 NGINX Plus

如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到 Release 10。 您将获得大量修复和改进,如果您需要提出支持单,它将帮助我们为您提供帮助。 安装和升级说明可以在NGINX Plus 客户门户上找到。

笔记: NGINX Plus R10 是包含nginx-plus-extras包的最后一个版本。 请参阅上文的“NGINX Plus Extras 包已被弃用”

如果您还没有尝试过NGINX Plus ,我们鼓励您尝试使用它来进行 Web 加速、负载均衡和应用交付,或者作为具有增强监控管理API 的完全支持的 Web 服务器。 您可以立即免费开始30 天评估,亲自了解 NGINX Plus 如何帮助您交付和扩展您的应用。

有关 NGINX Plus R10 的更多信息

有关 NGINX Plus R10 中主要新功能的更多详细信息,请参阅以下相关资源:

[NGINX ModSecurity WAF 于2022 年 4 月 1 日正式停止销售,并将于2024 年 3 月 31 日停止使用。 有关更多详细信息,请参阅我们博客上的“F5 NGINX ModSecurity WAF 正在过渡到终止使用” 。]


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”