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 有什么新功能?”
此版本的主要功能包括:
笔记: 根据用户对alpha 级补丁的测试,并在企业共同赞助商 Automattic 和 Dropbox 的早期支持下,HTTP/2 的最终开源版本将在 R7 发布后推出。
SO_REUSEPORT选项,目前需要 Linux 3.9+ 或 DragonFly BSD。NGINX 公司首席执行官 Gus Robertson 表示:“在过去的一年里,我们已经帮助数百名新客户使用 NGINX Plus 部署他们的应用,而我们最新版本的真正目的是为他们提供更多的工具,以确保为用户提供最佳体验。” “我们是客户基础设施的结构,这使我们处于独特的地位,能够为客户部署的应用提供无与伦比的可视性和控制力。 我们非常重视我们在客户业务中扮演的关键角色,NGINX Plus R7 中的新功能反映了这一点。”
近几个月来,NGINX 的采用率大幅增长。 NGINX 是排名前 100,000 个网站的排名第一的 Web 服务器,全球近一半最繁忙的网站都使用 NGINX 向数十亿用户提供其应用。 NGINX, Inc. 继续大力投资于我们的开源和商业支持工具,以便每个人都能轻松获得完美的应用交付——从最小、最轻的应用程序到世界上最大的平台。
NGINX Plus R7功能详情
本节详细概述了NGINX Plus R7中的所有新特性和功能。
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:
server { listen 443 ssl http2 default_server;
}要启用 HTTP/2 支持,请从 NGINX Plus 存储库安装nginx-plus-http2包。 该软件包不支持SPDY/3.1。 标准nginx-plus和nginx-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线程指令添加到位置块:
location / { root /storage;
aio threads;
}有关 NGINX 中线程池的详细概述,请参阅此博客文章。
套接字分片最早是在 NGINX 1.9.1 中引入的。 此功能利用了 Linux 内核 3.9 版中引入的SO_REUSEPORT套接字选项。 启用该选项后,Linux 内核本身会以循环方式在 NGINX 工作进程之间均匀分配新连接。 然后,工作进程执行请求限制、缓存、负载均衡以及您配置的所有其他工作。
如果没有SO_REUSEPORT ,新的连接将被提供给所有可用的工作进程。 第一个从队列中获取连接的人将获得该连接。 由于没有均匀分配负载的算法,因此很容易出现偏差,少数工作进程承担大部分负载,而其他工作进程却未得到充分利用。 让进程争夺数据包也是低效的,因为这会导致锁争用。
通过确保工作在 NGINX 工作进程之间均匀分配,套接字分片可以将性能提高 3 倍。 要启用此功能,请将新的repeatport参数添加到现有的listen指令中。
server { listen 12345 reuseport;
# ...
}要了解有关此功能的更多信息,请参阅此博客文章。
笔记: 此功能需要Linux内核3.9或更高版本。 Ubuntu 13.10 及更高版本以及 Red Hat Enterprise Linux 7 及更高版本包含所需的功能。
NGINX Plus R7增加了更多功能来提高应用的安全性。 本节概述了这些功能。
TCP 代理和负载均衡的新功能改善了访问控制(受 IP 地址限制)、连接限制(限制每个客户端或服务的并发连接数)和带宽使用(限制每个连接的上行或下行带宽)。 这些功能已经可用于 HTTP 负载均衡,并且在 API 计量和 DDoS 防护方面取得了巨大成功。
有关更多详细信息,请参阅相关博客文章NGINX Plus R7<.htmlspan>中的 TCP 负载平衡。
应大众需求, NGINX Plus R7可以代理和负载平衡使用 Microsoft NT LAN Manager ( NTLM ) 进行身份验证的应用。 NTLM 是许多 Microsoft 产品(尤其是旧版应用)使用的身份验证协议。
我们对 NTLM 的支持满足了安全要求,即与后端服务器的连接保持活动但不多路复用,以便每个经过 NTLM 身份验证的客户端都与后端服务器具有唯一的专用连接。
要启用 NTLM 支持,请在 HTTP 上游组的配置中添加ntlm指令:
upstream backend { server 192.168.1.10;
server 192.168.1.11;
ntlm;
}您现在可以放心地将 NGINX 部署为 Microsoft应用前面的代理、负载均衡器和 HTTP/2 加速器,以支持最广泛的客户端设备。
NGINX Plus 提供详细的监控和统计数据,以便于观察、优化和调试应用和基础设施。 基于该功能, NGINX Plus R7配备了新的计数器和统计数据。 这些计数器可帮助您调整 NGINX Plus 部署,并在何时需要扩大或缩小规模以处理更多负载时做出明智的决策。 新的统计数据和计数器是:
499 错误– 用于跟踪每个服务器的错误计数器499错误,当客户端在后端服务器完成处理其请求之前关闭连接时发生。 几个499错误是可以接受的(人们经常在会话中间关闭他们的网络浏览器),但大量的错误可能表明服务器超载并且需要很长时间来处理请求。与所有其他计数器一样,您可以通过在配置中包含api指令来启用新的计数器。
NGINX Plus 仪表板在 R7 中得到了很大改进,以简洁的格式显示关键系统信息,即使对于大型复杂的配置也是如此:

要了解更多信息,请参阅相关博客文章《新的 NGINX Plus 仪表板<.htmla>》。
NGINX Plus R7还有许多其他增强功能,不属于上述任何类别:
开始、结束和偏移参数。 这使得内容发布者可以轻松发布视频流片段的链接。内容修改- 以前,NGINX Plus 只能对响应内容进行一个简单的内容更改,用一个字符串替换另一个字符串。 sub_filter指令已扩展以支持变量和替换链,从而可以进行更复杂的更改。
扩展的内容修改功能可以轻松调整网页内容,例如更改方法( https://而不是http:// )、域或消息内容中超链接的其他路径元素。 您还可以使用它将内容插入 HTML 页面,例如样板文本或 JavaScript 片段,而无需修改原始 HTML 内容。
$upstream_connect_time变量——一个新的NGINX 变量,用于跟踪连接到后端服务器所需的时间,从而更容易识别慢速服务器。nginx命令上的新-T标志以清晰、标准化的格式将解析的 NGINX 配置转储到标准输出。 这对于存档目的或提交支持票时很有用。proxy_bind 、 proxy_protocol和tcp_nodelay指令以及listen指令的backlog参数现在支持 TCP 流量( stream模块)和 HTTP 流量。 有关更多详细信息,请参阅NGINX Plus R7 中的 TCP 负载均衡<.htmlspan> 。如果您将Phusion Passenger Open Source与 NGINX Plus 一起使用(您的配置中包含Passenger_root指令),则必须在升级到NGINX Plus R7 nginx-plus-extras包的同时将 Passenger 运行时升级到版本 5.0.15。 执行以下步骤(这些命令适用于 Ubuntu):
停止 NGINX Plus:
# service nginx stop将您的 Phusion Passenger 运行时升级到 5.0.15:
# apt-get install passenger将 NGINX Plus Extras 包升级到 R7:
# apt-get install nginx-plus-extras按照 Phusion Passenger升级说明中所述对 NGINX Plus 配置指令进行必要的更新。
启动 NGINX Plus:
# service nginx start完整的安装和升级说明可在 NGINX Plus客户门户上找到。
如果您正在运行 NGINX Plus,我们强烈建议您尽快升级到 Release 7。 您将获得大量修复和改进,如果您需要提出支持单,它将帮助我们为您提供帮助。 您可以在客户门户上找到安装和升级说明。
如果您还没有尝试过NGINX Plus ,我们鼓励您尝试使用它来实现 Web 加速、负载均衡和应用交付,或者作为具有增强监控和管理API 的完全支持的 Web 服务器。 您可以立即免费开始30 天评估,亲自了解 NGINX Plus 如何帮助您扩展和交付应用。
listen指令上的spdy参数(将其替换为http2和ssl参数以启用对 HTTP/2 的支持)。 使用nginx-plus-http2包时,如果任何listen指令具有spdy参数,NGINX Plus 将无法启动。“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”