[编辑– 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 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 来降低应用管理员的复杂性。
除了安全功能外,NGINX Plus R10 还包括:
透明代理支持——尽管许多现代 HTTP应用可以配置为依赖X-Forwarded-For
标头,但一些旧式应用和其他 TCP 或 UDP 服务会引用事务的源 IP 地址以进行日志记录、安全或身份验证。
NGINX Plus 现在可以“欺骗”它转发到上游服务器的HTTP和TCP 连接以及 UDP 数据报的源 IP 地址和端口。 这可用于提供IP 透明度,即 NGINX Plus 使用远程客户端的 IP 地址发送数据包的配置,以便上游服务器将数据包视为来自该地址,而不是 NGINX Plus 服务器上的本地 IP 地址。 此功能还可用于启用基于 UDP 协议的直接服务器返回。
map
指令的计算、使用split_clients
指令的 A/B 测试支持、 Geo和GeoIP操作以及选择性路由( proxy_pass
指令的变量参数)。 这些扩展使您能够创建更复杂的 TCP 和 UDP 负载均衡策略,由 NGINX 配置语言和新的 NGINX JavaScript 集成驱动。NGINX Plus R10 中的头条功能是我们 WAF 的初始版本,它基于著名且值得信赖的ModSecurity技术构建。 自 2002 年首次发布开源版本以来,ModSecurity 一直致力于保护世界上一些最大的网络资产免受恶意用户的攻击。 它通常被称为安全领域的“瑞士军刀”。 NGINX ModSecurity WAF是一个额外付费选项,通过我们的动态模块存储库提供给订阅者。
NGINX ModSecurity WAF 是帮助保护关键应用安全的必备解决方案。 它为不灵活且昂贵的硬件设备(例如 F5、Citrix 和 Imperva 提供的设备)提供了一种经济高效的替代方案,同时还以软件的灵活性超越了它们的功能。 NGINX ModSecurity WAF 可以部署在任何环境中——本地服务器、公共云、私有云和混合云。
WAF 在“规则”数据库上运行,该数据库定义要阻止和/或记录的恶意行为。 OWASP ModSecurity 核心规则集(CRS)是 ModSecurity 使用最广泛的规则集之一。 NGINX ModSecurity WAF 使用 OWASP CRS 来识别和阻止各种应用攻击,具有以下功能:
不同的供应商(例如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 重新加载
NGINX Plus R10 原生支持 JSON Web Token (JWT) 身份验证标准,可轻松向您的应用和 API 添加复杂的身份验证解决方案。
JWT(发音为“jot”)令牌在RFC 7519中定义,是OpenID Connect标准中用户信息的底层数据格式,该标准是 OAuth 2.0 协议之上的标准身份层。 API 和微服务的部署者也因为 JWT 的简单性和灵活性而转向它。
[编辑– 有关利用本机 JWT 支持的用例,请参阅以下博客:
]
作为反向代理和负载均衡器,NGINX Plus 位于应用前端,通过卸载每个 HTTP 请求中提供的 JWT 验证,可以简化应用开发。 这有两个好处。 首先,NGINX Plus 可以帮助阻止未经身份验证、格式错误和恶意的请求到达应用,从而保护它免受处理此类请求所涉及的工作量和风险。
第二个好处是 NGINX Plus 可以访问经过验证的 JWT 中的所有字段(经过签名验证后),并且可以利用其配置语法的固有功能和灵活性为微服务和 API 提供复杂的身份验证解决方案:
以下示例 NGINX Plus 配置代码片段展示了如何使用 JWT 来保护网站。
auth_jwt
指令告诉 NGINX Plus 使用 JWT 来验证对域发出请求的用户,在本例中为 myrealm 。 auth_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 实施中,我们采纳了客户的反馈,提供可用于生产的实施,以满足在复杂的用户和计算机身份验证领域中最有价值的用例。
现在有很多理由开始使用 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_certificate
和ssl_certificate_key
指令,如下例所示。
我们不断为 NGINX Plus 添加功能,例如TCP和UDP负载均衡,以支持更广泛的应用和部署模型。 在 NGINX Plus R10 中,我们添加了透明代理功能,允许 NGINX Plus 使用任何源 IP 地址和端口将数据包发送到上游服务器。 这可以启用 IP 透明度和直接服务器返回等配置。
IP 透明度是一种配置,其中负载均衡器(NGINX Plus)使用远程客户端的 IP 地址作为其发送到上游服务器的数据包中的源 IP 地址。 这意味着上游服务器将数据包视为来自远程客户端的 IP 地址,而不是来自负载均衡器上的本地 IP 地址。 当应用出于日志记录、安全、速率限制或身份验证目的引用源 IP 地址时,这一点非常重要。
IP 透明度也是称为直接服务器返回(DSR) 的网络负载平衡技术的基础。 NGINX Plus 可以对基于 UDP 的协议(但不是 TCP 或 HTTP)执行 DSR,从而允许返回数据包完全绕过负载均衡器并直接到达远程客户端。
IP 透明度和 DSR 使用proxy_bind
、 fastcgi_bind
、 memcached_bind
、 scgi_bind
和uwsgi_bind
指令的新透明
参数进行配置。 以下示例显示如何为 DNS 后端设置 DSR。 proxy_responses
指令指定 NGINX Plus 不需要查看任何服务器响应(零是 DSR 的适当值)。
请注意,启用 DSR 时被动健康检查无效,因为它们涉及 NGINX Plus 验证服务器是否向客户端发送了响应。 对于 DSR 配置来说,配置主动应用感知健康检查是强制性的。 例如,请参阅我们关于为负载平衡 DNS 服务器配置它们的详细说明。
IP 透明度和 DSR 配置很复杂,还有额外的路由和数据包重写要求,超出了 NGINX Plus 软件的范围。 有关完整说明,请参阅我们博客上的使用 NGINX 和 NGINX Plus 作为透明代理实现 IP 透明度和直接服务器返回。
[编辑器– 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,您可以:
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 引入了许多其他改进,以帮助您完美地交付应用,其中包括:
proxy_pass
指令的参数来执行路由决策。IP_BIND_ADDRESS_NO_PORT
套接字选项(如果可用)。 此选项允许重新使用源端口来与上游服务器建立传出连接,前提是标准“4 元组”(源 IP 地址、目标 IP 地址、源端口、目标端口)是唯一的。 它适用于 Linux 内核版本 4.2 及更高版本以及glibc 2.22 及更高版本的系统。$request_id
,有效地为请求分配一个唯一的“事务 ID”。 这有助于应用跟踪并将 APM 功能引入日志分析工具。 交易 ID 被代理到后端应用和微服务,以便系统的所有部分都可以为每个交易记录一致的标识符。proxy_request_buffering
、 fastcgi_request_buffering
、 scgi_request_buffering
和uwsgi_request_buffering
指令现在可与 HTTP/2 配合使用,并可用于切换请求缓冲。http2_body_preread_size
指令允许 HTTP/2 客户端立即开始发送请求正文。 该指令控制 NGINX Plus 开始读取客户端请求正文之前使用的缓冲区的大小。正如我们在 NGINX Plus R9 发布时预先宣布的那样,R10 是包含 NGINX Plus Extras 包的最后一个版本。
我们强烈建议您现在修改您的安装和配置程序以使用nginx-plus包并动态加载您实际使用的nginx-plus-extras包中的模块。 从 NGINX Plus R11 开始,这将是使用未内置于nginx-plus包中的模块的唯一可能方法。
要切换到nginx-plus包和动态模块,请执行以下步骤:
删除nginx-plus-extras包并安装nginx-plus和您想要使用的动态模块。 对于基于 Debian 的系统,适当的命令集是:
# apt-get 更新# apt-get 删除 nginx-plus-extras # apt-get 安装 nginx-plus # apt-get 安装模块名称
在/etc/nginx/nginx.conf中的主(顶层)上下文中,为每个动态加载的模块添加一个load_module
指令:
检查新配置的语法有效性并重新加载:
# nginx -t && nginx -s 重新加载
如果您正在运行 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 ModSecurity WAF 于2022 年 4 月 1 日正式停止销售,并将于2024 年 3 月 31 日停止使用。 有关更多详细信息,请参阅我们博客上的“F5 NGINX ModSecurity WAF 正在过渡到终止使用” 。]
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”