博客 | NGINX

宣布推出 NGINX Plus R7

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

NGINX, Inc. 自豪地宣布推出 NGINX Plus Release 7 (R7),这是我们应用交付平台的最新版本。 此次更新提供了对新 HTTP/2 Web 标准的完全支持实现,这是领先 Web 服务器中首个此类实现。 NGINX Plus 可以部署为新旧 Web 服务的前端 HTTP/2 网关和加速器。

[编辑 – 此文章已更新,引用了NGINX Plus API ,它取代并弃用了文章原始版本中提到的单独状态模块。]

最新更新还增加了显著的改进和附加功能,以确保组织能够以企业应用所需的性能、安全性和可靠性来交付其应用程序。 这些包括重大改进,使应用监控、管理和调试更容易,以及额外的安全和性能优化功能。

编辑器 – 有关NGINX Plus R7中主要新功能的更多详细信息,请参阅以下相关博客文章:

还请查看我们的点播网络研讨会“ NGINX Plus R7 有什么新功能?”

此版本的主要功能包括:

  • 完全支持 HTTP/2 的实现- NGINX Plus 现在提供对新 HTTP/2 Web 标准的完全支持实现。 NGINX Plus 可以部署为新旧 Web 服务的前端 HTTP/2 网关和加速器。

    HTTP/2 支持仅在可选nginx-plus-http2包中可用。 nginx-plusnginx-plus-extras包提供 SPDY 支持,由于其更广泛的浏览器支持和代码成熟度,目前推荐用于生产站点。

    笔记: 根据用户对alpha 级补丁的测试,并在企业共同赞助商 Automattic 和 Dropbox 的早期支持下,HTTP/2 的最终开源版本将在 R7 发布后推出。

  • 性能显著提升NGINX Plus R7支持异步 I/O线程池。 这可以加速涉及高水平磁盘 I/O 的工作负载,例如内容缓存。 我们的基准测试表明,对于某些工作负载,线程池可以将性能提高 9 倍

    NGINX Plus R7还支持套接字分片优化,以提高多核服务器的性能。 我们的基准测试表明,这可以增加每秒的请求数,并将延迟减少 3 倍以上。 套接字分片使用SO_REUSEPORT选项,目前需要 Linux 3.9+ 或 DragonFly BSD。
  • 访问控制和安全增强– NGINX Plus 中的新功能和扩展功能有助于提高应用的安全性和可靠性。 TCP 服务的访问控制和连接限制使您能够将保护规则应用于所有 NGINX 管理的服务,而对 NT LAN 管理器 (NTLM) 身份验证的支持意味着您可以在旧式 Microsoft应用前面部署 NGINX Plus。
  • 改进的监控和诊断- NGINX Plus 为现有状态和仪表板工具添加了更详细的监控和统计数据。 跟踪客户端错误、内部 NGINX 活动和服务上的 SSL 负载,以帮助识别问题并调整配置。
  • 更新的、交互式的 NGINX Plus 仪表板- NGINX Plus 的实时活动监控仪表板已经得到显著扩展,现在提供选项卡式界面,可提供有关 NGINX 性能和健康状况的更详细视图。 您可以深入了解并了解基础设施的问题,并快速更改配置。

NGINX 公司首席执行官 Gus Robertson 表示:“在过去的一年里,我们已经帮助数百名新客户使用 NGINX Plus 部署他们的应用,而我们最新版本的真正目的是为他们提供更多的工具,以确保为用户提供最佳体验。” “我们是客户基础设施的结构,这使我们处于独特的地位,能够为客户部署的应用提供无与伦比的可视性和控制力。 我们非常重视我们在客户业务中扮演的关键角色,NGINX Plus R7 中的新功能反映了这一点。”

近几个月来,NGINX 的采用率大幅增长。 NGINX 是排名前 100,000 个网站的排名第一的 Web 服务器,全球近一半最繁忙的网站都使用 NGINX 向数十亿用户提供其应用。 NGINX, Inc. 继续大力投资于我们的开源和商业支持工具,以便每个人都能轻松获得完美的应用交付——从最小、最轻的应用程序到世界上最大的平台。

NGINX Plus R7功能详情

本节详细概述了NGINX Plus R7中的所有新特性和功能。

全面支持 HTTP/2 的实现

NGINX Plus R7通过新的nginx-plus-http2包提供对 HTTP 协议最新版本 HTTP/2 的支持。 HTTP/2 为现代 Web应用带来了更高的性能和安全性。 NGINX Plus 对 HTTP/2 的支持可与您现有的网站和应用程序无缝协作,无需对它们进行任何更改,只需对 NGINX Plus 配置进行极少的更改。 NGINX Plus R7完全向后兼容,可以并行传输 HTTP/1.x 和 HTTP/2 流量,无论用户选择哪种浏览器都能获得最佳体验。

为了简化向 HTTP/2 的过渡,NGINX Plus 充当了“HTTP/2 网关”。 在前端,NGINX Plus 与支持 HTTP/2 的客户端 Web 浏览器对话,在后端,它与以前一样与 HTTP/1.x(或 FastCGI、SCGI、uWSGI 等)对话。 这意味着 NGINX Plus 代理的服务器和应用不会受到转向 HTTP/2 的影响,甚至不需要知道客户端正在使用哪个 HTTP 版本。

为了并行支持 HTTPS 和 HTTP/2,NGINX Plus 同时支持 TLS 中的下一代协议协商 (NPN) 和application层协议协商 (ALPN) 扩展。 如果客户端和服务器都支持 HTTP/2,这些扩展用于将 HTTPS 连接无缝升级到 HTTP/2。

唯一需要的配置更改是将http2参数添加到现有的listen指令中。 请注意,仅当还包含ssl参数时才支持 HTTP/2:

服务器 { 监听 443 ssl http2默认服务器; }

要启用 HTTP/2 支持,请从 NGINX Plus 存储库安装nginx-plus-http2包。 该软件包不支持SPDY/3.1。 标准nginx-plusnginx-plus-extras包支持 SPDY/3.1 而不是 HTTP/2,并且由于其更广泛的浏览器支持和代码成熟度,目前推荐用于生产站点。 请注意,我们目前没有构建支持 HTTP/2 的nginx-plus-extras包版本。

要了解有关 HTTP/2 的更多信息:

显著提高性能

NGINX Plus R7包含多项性能增强功能,可以帮助您的应用获得更好的性能。 它增加了对线程池优化的支持,可以卸载可能阻塞的磁盘操作并提高涉及大量磁盘 I/O 的工作负载(例如内容缓存)的性能。 NGINX Plus R7还包括套接字分片优化(需要 Linux 3.9+ 或 Dragonfly BSD),可提高大量 nginx 进程处理流量的大型多核服务器的效率。 它们已在 NGINX 开源部署中进行了现场测试,并且现在作为 NGINX Plus 的一部分得到全面支持。

线程池

在 NGINX Plus 中使用线程池可以为您带来 9 倍的更好性能。 众所周知,NGINX 使用异步、事件驱动的方法来处理连接。 但是异步、事件驱动的方法仍然存在一个问题:阻塞。 在 Linux 上,磁盘操作是阻塞的,因此在涉及大量磁盘 I/O 的操作期间,NGINX 可能会花费大量时间阻塞而不是执行生产性工作。

分配一个处理磁盘 I/O 的线程池可以缓解这个问题。 NGINX 工作进程不会自行转到磁盘,而是将 I/O 操作交给池中的可用线程,然后照常处理流量。 当磁盘操作完成时,NGINX 工作进程会收到通知并可以继续执行剩余工作以满足请求。

要启用线程池,只需将aio线程指令添加到位置块:

位置 / { 根 /存储; aio 线程;}

有关 NGINX 中线程池的详细概述,请参阅此博客文章

套接字分片

套接字分片最早是在 NGINX 1.9.1 中引入的。 此功能利用了 Linux 内核 3.9 版中引入的SO_REUSEPORT套接字选项。 启用该选项后,Linux 内核本身会以循环方式在 NGINX 工作进程之间均匀分配新连接。 然后,工作进程执行请求限制、缓存、负载均衡以及您配置的所有其他工作。

如果没有SO_REUSEPORT ,新的连接将被提供给所有可用的工作进程。 第一个从队列中获取连接的人将获得该连接。 由于没有均匀分配负载的算法,因此很容易出现偏差,少数工作进程承担大部分负载,而其他工作进程却未得到充分利用。 让进程争夺数据包也是低效的,因为这会导致锁争用。

通过确保工作在 NGINX 工作进程之间均匀分配,套接字分片可以将性能提高 3 倍。 要启用此功能,请将新的repeatport参数添加到现有的listen指令中。

服务器 { 监听 12345重用端口; # ... }

要了解有关此功能的更多信息,请参阅此博客文章

笔记: 此功能需要Linux内核3.9或更高版本。 Ubuntu 13.10 及更高版本以及 Red Hat Enterprise Linux 7 及更高版本包含所需的功能。

访问控制和安全增强

NGINX Plus R7增加了更多功能来提高应用的安全性。 本节概述了这些功能。

TCP 访问控制和限制

TCP 代理和负载均衡的新功能改善了访问控制(受 IP 地址限制)、连接限制(限制每个客户端或服务的并发连接数)和带宽使用(限制每个连接的上行或下行带宽)。 这些功能已经可用于 HTTP 负载均衡,并且在 API 计量和 DDoS 防护方面取得了巨大成功。

有关更多详细信息,请参阅相关博客文章NGINX Plus R7<.htmlspan>中的 TCP 负载平衡

NTLM 支持

应大众需求, NGINX Plus R7可以代理和负载平衡使用 Microsoft NT LAN Manager ( NTLM ) 进行身份验证的应用。 NTLM 是许多 Microsoft 产品(尤其是旧版应用)使用的身份验证协议。

我们对 NTLM 的支持满足了安全要求,即与后端服务器的连接保持活动但不多路复用,以便每个经过 NTLM 身份验证的客户端都与后端服务器具有唯一的专用连接。

要启用 NTLM 支持,请在 HTTP 上游组的配置中添加ntlm指令:

上游后端 { 服务器 192.168.1.10; 服务器 192.168.1.11; ntlm ; }

您现在可以放心地将 NGINX 部署为 Microsoft应用前面的代理、负载均衡器和 HTTP/2 加速器,以支持最广泛的客户端设备。

改进的监控和诊断

NGINX Plus 提供详细的监控和统计数据,以便于观察、优化和调试应用和基础设施。 基于该功能, NGINX Plus R7配备了新的计数器和统计数据。 这些计数器可帮助您调整 NGINX Plus 部署,并在何时需要扩大或缩小规模以处理更多负载时做出明智的决策。 新的统计数据和计数器是:

  • 499 错误– 用于跟踪每个服务器的错误计数器499错误,当客户端在后端服务器完成处理其请求之前关闭连接时发生。 几个499错误是可以接受的(人们经常在会话中间关闭他们的网络浏览器),但大量的错误可能表明服务器超载并且需要很长时间来处理请求。
  • NGINX Plus 工作程序重启– NGINX Plus 工作程序重启的次数。 这有助于检测 NGINX Plus 工作进程的崩溃。
  • NGINX Plus 重新加载– NGINX Plus 重新加载的次数。 这证实 NGINX Plus 确实已重新加载,或者由于配置不当等各种原因导致重新加载失败。
  • 队列溢出——每个服务器的计数器,用于测量服务器处理负载的能力。 大量的队列溢出表明服务器正在努力跟上。
  • SSL 握手– 完成的 SSL 握手次数。
  • 重用 SSL 会话— 从早期会话中重用的 SSL 会话数。
  • 新的 SSL 会话– 协商的新 SSL 会话的数量。

与所有其他计数器一样,您可以通过在配置中包含api指令来启用新的计数器。

更新的交互式 NGINX Plus 仪表板

NGINX Plus 仪表板在 R7 中得到了很大改进,以简洁的格式显示关键系统信息,即使对于大型复杂的配置也是如此:

  • 新的仪表板概览选项卡提供了 NGINX Plus 活动的完整单页摘要,以及应用运行状况的摘要。
  • 仪表板上的界面使您能够临时添加和删除负载均衡池中的服务器,以及临时将服务器标记为耗尽或不活动。
  • 新的过滤器使您能够快速深入挖掘并找到故障的服务器。
  • 新的选项卡视图可让您从“仪表板”选项卡快速切换到区域、上游和缓存信息的更详细视图。
  • 在整个仪表板中,新的工具提示提供了有关上游服务器、配置重新加载、缓存状态和任何错误消息的更详细信息。

要了解更多信息,请参阅相关博客文章《新的 NGINX Plus 仪表板<.htmla>》。

更多好东西

NGINX Plus R7还有许多其他增强功能,不属于上述任何类别:

  • 改进的 HLS 流媒体- NGINX Plus 现在支持 HLS .m3u8 URI 上的开始结束偏移参数。 这使得内容发布者可以轻松发布视频流片段的链接。
  • 内容修改- 以前,NGINX Plus 只能对响应内容进行一个简单的内容更改,用一个字符串替换另一个字符串。 sub_filter指令已扩展以支持变量和替换链,从而可以进行更复杂的更改。

    扩展的内容修改功能可以轻松调整网页内容,例如更改方法( https://而不是http:// )、域或消息内容中超链接的其他路径元素。 您还可以使用它将内容插入 HTML 页面,例如样板文本或 JavaScript 片段,而无需修改原始 HTML 内容。

  • $upstream_connect_time变量——一个新的NGINX 变量,用于跟踪连接到后端服务器所需的时间,从而更容易识别慢速服务器。
  • 配置转储- nginx命令上的新-T标志以清晰、标准化的格式将解析的 NGINX 配置转储到标准输出。 这对于存档目的或提交支持票时很有用。
  • 更加可配置的 TCP 负载均衡- proxy_bindproxy_protocoltcp_nodelay指令以及listen指令的backlog参数现在支持 TCP 流量( stream模块)和 HTTP 流量。 有关更多详细信息,请参阅NGINX Plus R7 中的 TCP 负载均衡<.htmlspan>
  • Redis 支持- 第三方Redis模块( lua-resty-redis )现已内置于nginx-plus-extras包中。 它使 NGINX Plus 能够与 Redis 数据库交互(例如,获取和设置值),并且作为 NGINX Plus 订阅的一部分获得完全支持。
  • 更新的 Phusion Passenger 模块– Phusion Passenger 开源模块已更新至 5.0.15 版本。

升级 Phusion Passenger Open Source 以兼容 NGINX Plus

如果您将Phusion Passenger Open Source与 NGINX Plus 一起使用(您的配置中包含Passenger_root指令),则必须在升级到NGINX Plus R7 nginx-plus-extras包的同时将 Passenger 运行时升级到版本 5.0.15。 执行以下步骤(这些命令适用于 Ubuntu):

  1. 停止 NGINX Plus:

    #停止服务
  2. 将您的 Phusion Passenger 运行时升级到 5.0.15:

    # apt-get 安装乘客
  3. 将 NGINX Plus Extras 包升级到 R7:

    # apt-get 安装 nginx-plus-extras
  4. 按照 Phusion Passenger升级说明中所述对 NGINX Plus 配置指令进行必要的更新。

  5. 启动 NGINX Plus:

    #启动 nginx 服务

完整的安装和升级说明可在 NGINX Plus客户门户上找到。

升级或尝试 NGINX Plus

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

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

注意事项

  • NGINX Plus R7不再支持 Debian 6、SLES 11 SP3 或 Ubuntu 10.04 LTS 或 14.10,因为这些发行版不再普遍受支持。 在升级到NGINX Plus R7之前,请升级到支持的操作系统发行版
  • NGINX Plus R7是包含nginx-plus-lua包的最后一个版本;如果您正在使用该包,请计划迁移到NGINX Plus Release 8中的nginx-plus-extras包。
  • 在安装nginx-plus-http2包之前,您必须删除配置中所有listen指令上的spdy参数(将其替换为http2ssl参数以启用对 HTTP/2 的支持)。 使用nginx-plus-http2包时,如果任何listen指令具有spdy参数,NGINX Plus 将无法启动。

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