我们很高兴地宣布NGINX Plus Release 28 (R28)已经推出。 NGINX Plus 基于 NGINX 开源,是唯一集Web 服务器、负载均衡器、反向代理、内容缓存和 API 网关于一体的软件。
NGINX Plus R28的新增功能和增强功能包括:
额外的 TLS 指标- NGINX Plus R28在系统范围、客户端和服务器端级别收集额外的 TLS 统计信息,提供在排除代理配置中的 SSL/TLS 相关错误以及与客户端和上游服务器的连接时至关重要的洞察力。
NGINX Plus 实时活动监控仪表板已更新以显示新的 SSL 会话数据。
http
和流上下文
的模块,这些模块可以解码 TLV 并定义一个变量,用于将客户端标识符转发到后端服务。samesite
参数的变量支持- 在NGINX Plus R28中,粘性
cookie
指令的samesite
参数的值可以是变量。 这一改进使得交通管理更加容易且更加安全。该版本还包括从 NGINX 开源继承的新功能和错误修复以及对 NGINX JavaScript 模块的更新。
笔记: 如果您要从NGINX Plus R27以外的版本升级,请务必检查当前版本和此版本之间的所有版本的公告博客中的“行为的重要变化”部分。
支持的新操作系统和体系结构:
已删除旧操作系统:
较旧的操作系统和体系结构已弃用并计划在NGINX Plus R29中删除:
Content-Length
和Transfer-Encoding
标头以及具有无效Content-Length
或Transfer-Encoding
标头的响应会被拒绝,或者如果响应中同时存在Content-Length
和Transfer-Encoding
在解决代理配置、上游服务器和客户端的 TLS 相关问题时,SSL/TLS 事件和错误的可观察性非常重要。 自NGINX Plus R13中引入NGINX Plus API以来,NGINX Plus 已在系统范围级别收集了三个 TLS 指标:
握手
– 成功的 SSL 握手次数handshakes_failed
– SSL 握手失败的次数(不包括 SSL 握手后发生的证书验证失败)session_reuses
– SSL 会话重用次数在NGINX Plus R27<.htmla>及更高版本中,您可以配置单个上游服务器和虚拟服务器的三个指标的收集。
NGINX Plus R28扩展了 TLS 指标集,在 HTTP 和 Stream 模块中添加了握手错误和证书验证失败的新计数器(这里我们仅提供 HTTP 模块的示例,但可用的 Stream 指标是类似的)。 有关为各个上游服务器和虚拟服务器配置指标收集的详细信息,请参阅NGINX Plus R27<.htmlspan> 公告博客。
NGINX Plus R28中新增了以下握手错误的计数器:
handshake_timeout
– 由于握手超时导致的握手失败次数no_common_cipher
– 由于握手双方缺乏通用密码而导致的握手失败次数(由于不适用,因此不收集与上游服务器的连接)no_common_protocol
– 由于双方缺乏通用协议而导致的握手失败次数peer_rejected_cert
– 由于另一方拒绝 NGINX Plus 提供的证书并提供适当的警报消息而导致的握手失败次数当您配置证书验证时,现在会在 API 输出的新verify_failures
部分中报告证书验证失败:
ssl_verify_client
[ HTTP ][ Stream ] 指令的客户端连接对于使用这些协议特定指令来连接服务器:
grpc_ssl_verify
proxy_ssl_verify
[ HTTP ][流]uwsgi_ssl_verify
当发生证书验证失败时,相应原因的度量会增加,并且连接会断开。 但是请注意,基本握手
计数器仍然会增加,因为这些失败发生在握手成功之后。
证书验证失败的指标包括:
expired_cert
– 对等方提供了过期的证书hostname_mismatch
– 服务器的证书与主机名不匹配(未收集与客户端的连接)no_cert
– 客户端未按要求提供证书(未收集与上游服务器的连接)revoked_cert
– 对等方提供了已撤销的证书其他
– 其他证书验证失败的明确计数器以下是系统级别 HTTP 连接的一组示例 TLS 指标:
$ curl 127.0.0.1:8080/api/8/ssl { “握手”: 32,“session_reuses”: 0,“握手失败”: 8,“无公共协议”: 4,“无通用密码”: 2,“handshake_timeout”: 0,“peer_rejected_cert”: 0,"verify_failures": {"no_cert": 0,“过期证书”: 2,“revoked_cert”: 1,“主机名不匹配”: 2、“其他”: 1 } }
以下是客户端和 HTTP虚拟服务器s9之间的连接的一组示例指标(如前所述,不会收集此类连接的hostname_mismatch
计数器):
$ curl 127.0.0.1:8080/api/8/http/server_zones/s9 {...“ssl”:{“握手”: 0,“session_reuses”: 0,“握手失败”: 1,“无公共协议”: 0,“无通用密码”: 1,“握手超时”: 0,“peer_rejected_cert”: 0,"verify_failures": {"no_cert": 0,“过期证书”: 0,“撤销证书”: 0,“其他”: 0 } } ... }
以下是与u2上游组中的服务器的 HTTP 连接的一组示例指标(如前所述,不会收集此类连接的no_cert
和no_common_cipher
计数器):
$ curl 127.0.0.1:8080/api/8/http/upstreams/u2 { “peers”:[{ “id”: 0,“服务器”: “127.0.0.1:8082”, “名称”: “127.0.0.1:8082”,...“ssl”:{“握手”: 1、“session_reuses”: 0,“握手失败”: 0,“无通用协议”: 0,“握手超时”: 0,“peer_rejected_cert”: 0,"verify_failures": {"expired_cert": 1,“revoked_cert”: 0,“主机名不匹配”: 0,“其他”: 0 } }, ... } ], }
对于NGINX Plus R28及更高版本,实时活动监控仪表板显示上面描述的新 TLS 指标。 此屏幕截图显示了与客户端的连接指标。 要查看新指标,请将鼠标悬停在SSL > 握手失败列中的值上,如下所示。
三大领先的云提供商——亚马逊网络服务 (AWS)、谷歌云平台 (GCP) 和微软 Azure——均提供“私人服务”,您可以让外部客户端访问您的服务,而无需将其暴露在公共互联网上。 每个服务都使用一个客户端标识符,该标识符以 PROXY 协议 v2 标头中的类型长度值 (TLV)向量表示。 特定于服务的标识符为:
PP2_SUBTYPE_AWS_VPCE_ID
pscConnectionId
PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID
默认情况下,这些客户端标识符不会传递给后端服务。 NGINX Plus R28引入了用于http
和流
上下文的模块 - ngx_http_proxy_protocol_vendor_module和ngx_stream_proxy_protocol_vendor_module - 它们解码 TLV 并定义一个变量以将标识符转发到后端服务。
有关 NGINX Plus 如何使用 PROXY 协议获取 IP 地址和有关客户端的其他信息的一般信息,请参阅 NGINX Plus 管理指南中的接受 PROXY 协议。
在 AWS 中,通过虚拟私有云 (VPC) 端点服务来自客户端的流量的源 IP 地址是网络负载均衡器节点的私有 IP 地址。 如果后端应用需要客户端的真实 IP 地址和其他标识符,则可以从 PROXY 协议 v2 标头中获取。
在 AWS 中,自定义 TLV 向量在 PROXY 协议 v2 标头PP2_SUBTYPE_AWS_VPCE_ID
中对端点的 VPC ID 进行编码。 (有关更多信息,请参阅AWS 文档。)
场地 | 长度(八位字节) | 描述 |
---|---|---|
类型 | 1 | PP2_TYPE_AWS ( 0xEA ) |
长度 | 2 | 值的长度 |
价值 | 1 | PP2_SUBTYPE_AWS_VPCE_ID ( 0x01 ) |
变化(值长度减 1) | 端点的ID |
NGINX Plus R28解码 TLV 并将端点 ID 传递给$proxy_protocol_tlv_aws_vpce_id
变量中的后端应用。
笔记: 在引用$proxy_protocol_tlv_aws_vpce_id
变量的服务器
块中,您还必须将proxy_protocol
参数包含在listen
[ HTTP ][ Stream ] 指令中。 有关示例,请参见下面的proxy_protocol_v2.conf的第 8 行。
此 AWS 示例配置检查 VPC ID 是否可接受,如果可以,则将其作为add_header
指令的第二个参数传递给后端应用:
在 GCP Private Service Connect 中,来自客户端的流量的源 IP 地址是“服务生产商的 VPC 网络中的 Private Service Connect 子网之一中的地址”。 如果后端应用需要客户端的真实 IP 地址和其他标识符,则可以从 PROXY 协议 v2 标头中获取。
在 GCP 中,自定义 TLV 向量在 PROXY 协议 v2 标头pscConnectionId
中对唯一(当时)连接 ID 进行编码。 (有关更多信息,请参阅GCP 文档。)
场地 | 长度(字节) | 描述 |
---|---|---|
类型 | 1 | 0xE0 ( PP2_TYPE_GCP ) |
长度 | 2 | 0x8 (8 字节) |
价值 | 8 | 按网络顺序排列的 8 字节pscConnectionId |
NGINX Plus R28解码 TLV 并将pscConnectionId
的值传递给$proxy_protocol_tlv_gcp_conn_id
变量中的后端应用。
笔记: 在引用$proxy_protocol_tlv_gcp_conn_id
变量的服务器
块中,还必须将proxy_protocol
参数包含在listen
[ HTTP ][ Stream ] 指令中。 有关示例,请参见上面的proxy_protocol_v2.conf的第 8 行。
在 Microsoft Azure Private Link 中,来自客户端的流量的源 IP 地址是“服务提供商端使用从提供商虚拟网络分配的 NAT IP [地址] 进行的网络地址转换 (NAT)”。 如果后端应用需要客户端的真实 IP 地址和其他标识符,则可以从 PROXY 协议 v2 标头中获取。
在 Azure 中,自定义 TLV 向量在 PROXY 协议 v2 标头PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID
中对客户端的 LinkID 进行编码。 (有关更多信息,请参阅Azure 文档。)
场地 | 长度(八位字节) | 描述 |
---|---|---|
类型 | 1 | PP2_TYPE_AZURE ( 0xEE ) |
长度 | 2 | 值的长度 |
价值 | 1 | PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID ( 0x01 ) |
4 | UINT32(4 个字节)表示私有端点的LINKID 。 以小端格式编码。 |
NGINX Plus R28解码 TLV 并将 LinkID 传递给$proxy_protocol_tlv_azure_pel_id
变量中的后端应用。
笔记: 在引用$proxy_protocol_tlv_azure_pel_id
变量的服务器
块中,还必须将proxy_protocol
参数包含在listen
[ HTTP ][ Stream ] 指令中。 有关示例,请参见上面的proxy_protocol_v2.conf的第 8 行。
samesite
参数的变量支持在之前的 NGINX Plus 版本中,粘性
cookie
指令的samesite
参数有三个静态值( strict
、 lax
和none
)是可接受的。 在NGINX Plus R28中,该值也可以是变量。
默认情况下(没有samesite
参数),NGINX 不会将SameSite
属性注入到 cookie 中。 当samesite
参数是变量时,结果取决于变量在运行时如何解析:
strict
、 lax
和none
) – NGINX 将SameSite
属性设置为该值“”
) – NGINX 不会注入SameSite
属性Strict
(最安全的设置)的 SameSite
属性此示例配置根据 HTTP User-Agent
标头的值设置samesite
属性(这对于不支持SameSite
属性的旧客户端很有用):
NGINX Plus R28基于 NGINX Open Source 1.23.2,并继承了自NGINX Plus R27发布以来(NGINX 1.23.0 至 1.23.2)的功能更改和错误修复。 变更和错误修复包括:
解析器
指令的新ipv4=off
参数禁用 IPv4 地址的查找。ssl_session_cache
指令的共享参数为 HTTP 会话信息启用共享
缓存时,TLS 会话票证密钥现在会自动轮换。crit
降低到info
。有关从这些版本继承的新功能、更改和错误修复的完整列表,请参阅CHANGES文件。
NGINX Plus R28吸收了 NGINX JavaScript 模块(njs)0.7.5 至 0.7.8 版本中的更改和修复。 我们在博客中使用 njs 0.7.7 让您的 NGINX 配置更加模块化和可重用中重点介绍了其中的一些最重要的内容。 有关完整列表,请参阅变更文件。
如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到NGINX Plus R28 。 您还将获得一些额外的修复和改进,当您需要提出支持单时,它将帮助 NGINX 为您提供帮助。
如果您还没有尝试过 NGINX Plus,我们鼓励您尝试一下 – 为了安全、负载均衡和 API 网关,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 您今天就可以开始享受30 天免费试用。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”