NGINX Full Version

隆重推出 NGINX Plus R30

很高兴宣布推出 NGINX Plus Release 30 (R30) 版本。NGINX Plus 基于 NGINX 开源版构建而成,是唯一一款将软件 Web 服务器、负载均衡器、反向代理、内容缓存和 API 网关集于一身的多合一产品。

NGINX Plus R30 的新增特性包括:

此外,该版本还包括从 NGINX 开源版继承的新特性和漏洞修复,以及对 NGINX JavaScript 模块的更新。

 

重要行为变更

:如果您不是从 NGINX Plus R29 升级至 NGINX Plus R30,请务必查看之前的公告博客中的“重要行为变更”部分,了解当前版本和最新版本之间所有版本的嬗变过程。

弃用 listen … http2 指令

在 NGINX 1.25.1 中,listen … http2 指令已被弃用。使用 nginx -t 执行 NGINX 配置检查时,系统会发出如下警告。  

nginx -t
nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in etc/nginx/nginx.conf :15
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

我们强烈建议所有使用该指令的现有用户升级 NGINX 并使用 http2 指令,从而可在每个服务器上启用 HTTP/2。

将:

listen 443 ssl http2;

改为:

listen 443 ssl;
http2 on;

GeoIP2 模块在 Amazon Linux 2 上不可用

以前版本的 NGINX Plus 使用 Amazon Linux 2 EPEL 代码库中的“libmaxminddb”库来构建 GeoIP2 模块。但 EPEL 代码库不再提供此库,而且也无法从 Amazon Linux 2 发行版原生访问此库。因此,NGINX Plus R30 中不再提供该模块,因为没有可行的方法来为 Amazon Linux 2 构建它。

MQTT 指令的变更

用于指定构建 MQTT 消息的缓冲区大小的 mqtt_rewrite_buffer_size 指令已被 mqtt_buffers 指令所取代。新指令允许指定每个连接可分配的缓冲区数量,以及每个缓冲区的大小。

更新的 API 版本

NGINX Plus API 的版本号从 8 更新到了 9,以体现新版本添加了单位 worker 连接遥测中所述的单位 worker 指标。以前的版本号仍然有效,但输出结果不包括之后的 API 版本中添加的指标。

平台支持的变更

全新操作系统支持:

不再支持的旧版操作系统:

以下旧版操作系统已弃用并计划在 NGINX Plus R31 中移除:

 

新增特性详情

对 QUIC+HTTP/3 的原生支持

许多企业客户对基于 QUIC 的 HTTP/3 特性翘首以待,我们很高兴在 NGINX Plus R30 中正式引入这一特性。这是一项新技术和实现,我们将在未来版本中继续着重优化。我们建议 NGINX Plus 用户首先在非生产环境中进行试用,并向我们提出宝贵反馈意见。

NGINX Plus 利用操作系统自带的 SSL/TLS 库,依靠 OpenSSL 实现安全通信和加密功能。但由于在此版本中,OpenSSL 不支持 QUIC 的 TLS 接口,因此需要第三方库来提供 HTTP/3 所需的 TLS 功能。

为了解决这一问题,NGINX 团队开发了一个 OpenSSL 兼容层,这样就无需构建和交付第三方 TLS 库,例如 quictls、BoringSSL 和 LibreSSL。这有助于管理 NGINX 中的端到端 QUIC+HTTP/3 体验,既无需自定义 TLS 实现,也不必依赖第三方库的进度表和路线图。我们计划在未来版本中增强 OpenSSL 兼容层,增加 0-RTT 支持等更多特性和选项。

以下为 QUIC+HTTP/3 配置:
   

http {
        log_format quic '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" "$http3"';
        access_log logs/access.log quic;
        server {             # 为了提高兼容性,建议             # 对 quic 和 https 使用同一端口             listen 8443 quic reuseport;             listen 8443 ssl;
            ssl_certificate     certs/example.com.crt;             ssl_certificate_key certs/example.com.key;
            location / {                 # 需要浏览器将其定向到 quic 端口                 add_header Alt-Svc 'h3=":8443"; ma=86400';             }         }     }

NGINX Plus R30 中的 QUIC+HTTP/3 支持提供单个二进制文件 — 不像 NGINX Plus R29 中引入的实验性 HTTP/3 支持那样有单独的 nginx quic 二进制文件。这一改进便于您更轻松地在环境中部署该功能。

注:在 NGINX Plus R30 中,我们将停止对独立 QUIC 二进制文件的支持和更新,并计划在今年晚些时候移除其下载选项。

单位 worker 连接遥测

NGINX Plus 用户现在能够监控单位 worker 进程的总连接数,从而对 worker_connections 指令进行适当调整。这一改进可让用户更好地了解 worker 之间连接的分配情况。调整 worker 连接还有助于您更好地评估 NGINX 部署。

单位 worker 连接指标可通过 REST API 获取。若要检索单位 worker 连接指标,请使用 …/api/9/workers 端点。

若要检索各个 worker 的单位 worker 连接指标,请使用 .../api/9/workers/<worker id> 端点。worker id 的索引从 0 开始。

下面是响应示例:

{
      {
          "id": 0,
          "pid": 2346,
          "connections": {
              "accepted": 1,
              "dropped": 0,
              "active": 1,
              "idle": 0
          },
          "http": {
              "requests": {
                  "total": 15,
                  "current": 1
              }
          }
      },
      {
          "id": 1,
          "pid": 1234,
          "connections": {
              "accepted": 3,
              "dropped": 0,
              "active": 1,
              "idle": 0
          },
          "http": {
              "requests": {
                  "total": 15,
                  "current": 1
              }
          }
      },
    ...
}

NGINX Plus 实时活动监控仪表盘提供了单位 worker 连接指标,如下所示。请访问 demo.nginx.com,观看该特性的在线演示。

该仪表盘显示了以下有关 NGINX Plus 连接数和请求数的信息。

连接:

请求:

诊断软件包

为了缩短问题解决的周期,诊断软件包简化了在 NGINX 环境中解决问题所需的数据收集流程,而且还可帮助避免手动请求和收集故障排除所需信息所带来的不一致和延迟问题,从而提高 NGINX Plus 客户和 F5 支持部门之间沟通的效率。

诊断软件包收集:

我们添加诊断软件包的目的是让用户清楚地了解软件包中的脚本运行哪些命令以及正在收集哪些数据。请参阅 NGINX Plus 诊断软件包页面(链接即将发布,您可点击此处下载脚本。)

注:在当前 NGINX Plus R30 版本中,我们宣布新增诊断软件包,但该软件包实际上不受版本限制。未来,我们计划根据您和 F5 支持部门的反馈意见对其进行更新,以改进故障排除数据收集流程。

 

NGINX Plus R30 的其他增强特性

MQTT 优化

通过对消息队列遥测传输(MQTT)filter 模块进行内存消耗方面的改进,吞吐量现在提高了 4-5 倍。

mqtt_rewrite_buffer_size 指令已删除。取而代之的是新的 mqtt_buffers <num> <size> 指令的引入,以指定该模块可为每个连接分配的缓冲区数量,以及每个缓冲区的大小。缓冲区的默认数量为 100 个,每个缓冲区的默认大小为 1024 字节,因此变量的默认值为 mqtt_buffers <100> <1024>

DNS 重新加载优化

现在,对于重新加载时动态解析的上游主机,NGINX Plus 能够保留其 DNS 域名有效期,无需在重新加载配置时进行重新解析。在此更新之前,所有上游主机都会触发 DNS 解析。更新后,NGINX 会保留所有上游主机的 DNS 解析和有效期,在重新加载时仅对全新或变更的上游主机触发 DNS 解析。

这一优化对包含大量上游主机的 NGINX 环境影响最大。如果您的 NGINX 配置中有 100 台或更多上游主机,优化效果将最为明显。

从 NGINX 开源版继承的变更

NGINX Plus R30 基于 NGINX 开源版 1.25.1,继承了自 NGINX Plus R29 发布以来(NGINX 1.25.0 和 1.25.1)的功能变更、特性及漏洞修复。

变更

特性

漏洞修复

有关从最新版本继承的新变更、特性、漏洞修复及变通方案的完整列表,请参见 NGINX 变更文件。

NGINX JavaScript 模块的变更

NGINX Plus R30 包含 NGINX JavaScript (njs) 模块版本 0.8.0 的变更。

特性

变更

漏洞修复

有关所有特性、变更及漏洞修复的完整列表,请参阅 njs 变更日志。

 

升级或试用 NGINX Plus

如果您是 NGINX Plus 用户,我们强烈建议您尽快升级到 NGINX Plus R30。除了上述所有新特性以外,您还将获得更多修复和改进。升级到最新版本有助于 NGINX 团队在您需要时为您快速提供支持。

如果您还不是 NGINX Plus 用户,我们建议您立即申请试用。您可将其用于安全防护、负载均衡及 API 网关用例,或者用作 Web 服务器 — 采用增强型监控和管理 API 并受全面支持。请立即下载 30 天免费试用版