NGINX, Inc.很高兴地宣布,应用交付平台的最新版本NGINX Plus Release 7(R7)现已发布。此次更新提供了对全新HTTP/2 Web标准的全面支持实现,在主流Web服务器中尚属首例。NGINX Plus可部署为前端HTTP/2网关和加速器,适用于新建及现有Web服务。
[编者注:本文已更新,现改为介绍NGINX Plus API。该API取代了原文中提到的独立状态模块,后者现已弃用。]
最新更新还带来了显著改进和更多功能,帮助组织以企业应用所需的性能、安全性和可靠性交付应用。其中包括多项重要增强功能,可简化应用监控、管理和调试,并新增安全和性能优化功能。
编者注:有关NGINX Plus R7主要新功能的更多详情,请参阅以下相关文章:
- NGINX Plus现已全面支持HTTP/2
- NGINX中的线程池将性能提升至9倍!
- NGINX中的套接字分片
- 第7版中的全新NGINX Plus仪表板<.htmla>
- NGINX Plus R7中的TCP负载均衡<.htmlspan>
还可观看我们的点播网络研讨会:NGINX Plus R7 有哪些新功能?
此版本的主要功能包括:
- 全面支持的HTTP/2实现:NGINX Plus现已提供对新HTTP/2 Web标准的全面支持。NGINX Plus可部署为前端HTTP/2网关和加速器,适用于新建和现有Web服务。
仅可通过可选的nginx-plus-http2软件包获得HTTP/2支持。nginx-plus和nginx-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 Manager(NTLM)身份验证的支持,还可以将NGINX Plus部署在旧版Microsoft应用前端。
- 改进监控和诊断,NGINX Plus为现有状态和仪表盘工具增加了更详细的监控和统计数据。跟踪客户端错误、NGINX内部活动以及服务的SSL负载,有助于发现问题并优化配置。
- 更新后的交互式NGINX Plus仪表盘,NGINX Plus实时活动监控仪表盘已大幅扩展,现提供选项卡式界面,可更详细地查看NGINX的性能和运行状况。您可以深入查看相关信息,识别并了解基础设施存在的问题,并快速调整配置。
NGINX, Inc.首席执行官Gus Robertson表示:“过去一年,我们已帮助数百家新客户使用NGINX Plus部署应用。最新版本旨在为客户提供更多工具,帮助他们尽可能为用户带来良好体验。我们是客户基础设施的重要组成部分,因此能够以独特优势,帮助客户深入了解并有效控制其部署的应用。我们认真履行在客户业务中承担的关键职责,NGINX Plus R7的新增功能正体现了这一点。”
近几个月来,NGINX的采用率显著增长。在访问量排名前100,000的网站中,NGINX是使用率领先的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等)通信。这意味着,迁移到HTTP/2不会影响由NGINX Plus代理的服务器和应用程序,它们甚至无需了解客户端使用的是哪个HTTP版本。
为同时支持HTTPS和HTTP/2,NGINX Plus支持TLS中的下一协议协商(NPN)和应用层协议协商(ALPN)扩展。如果客户端和服务器均支持HTTP/2,这些扩展可将HTTPS连接无缝升级到HTTP/2。
唯一需要进行的配置更改是向现有的http2listenlisten指令添加ssl参数。请注意,只有同时包含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。由于SPDY/3.1获得更广泛的浏览器支持,且代码更为成熟,目前建议在生产站点中使用这些标准软件包。请注意,我们目前不构建支持HTTP/2的nginx-plus-extras软件包版本。
要了解有关HTTP/2的更多信息:
- 请阅读我们的白皮书,其中涵盖了需要了解的所有HTTP/2相关信息。
- 下载我们的特别版《高性能浏览器网络》电子书,作者为Google的Ilya Grigorik。
性能显著提升
NGINX Plus R7包含多项性能增强功能,可帮助进一步提升应用性能。它新增了对线程池优化的支持,可卸载可能造成阻塞的磁盘操作,并提升涉及大量磁盘I/O的工作负载(例如内容缓存)的性能。NGINX Plus R7还包含套接字分片优化(需要Linux 3.9+或Dragonfly BSD),可提高大型多核服务器的效率;在这类服务器上,大量nginx进程负责处理流量。这些优化已在NGINX Open Source部署中经过实际环境测试,现在作为NGINX Plus的一部分获得全面支持。
线程池
在NGINX Plus中使用线程池可将性能提升至9倍。众所周知,NGINX采用异步事件驱动方式处理连接。但异步事件驱动方式仍面临一个问题:阻塞。在Linux上,磁盘操作会造成阻塞,因此在涉及大量磁盘I/O的操作中,NGINX可能会长时间处于阻塞状态,而无法执行有效工作。
分配一个线程池来处理磁盘I/O,可以缓解这一问题。NGINX工作进程不再自行访问磁盘,而是将I/O操作交给线程池中的可用线程,然后照常继续处理流量。磁盘操作完成后,NGINX工作进程会收到通知,并可继续完成响应请求所需的其余工作。
要启用线程池,只需将aio threads指令添加到location块中:
location / { root /storage;
aio threads;
}如需全面了解NGINX中的线程池,请参阅这篇博客文章。
套接字分片
套接字分片最早在NGINX 1.9.1中引入。此功能利用了Linux内核3.9版中引入的SO_REUSEPORT套接字选项。启用此选项后,Linux内核会以轮询方式将新连接均匀分配给各个NGINX工作进程。随后,工作进程会执行请求限制、缓存、负载均衡以及您配置的其他所有任务。
如果不使用SO_REUSEPORT,所有可用的工作进程都会争抢新连接。最先从队列中取出连接的进程将获得该连接。由于没有均匀分配负载的算法,负载很容易失衡,少数工作进程承担大部分负载,而其他进程未得到充分利用。让进程争抢数据包的效率也很低,因为这可能导致锁争用。
套接字分片可确保工作负载在NGINX工作进程之间均匀分配,从而将性能提升至多3倍。要启用此功能,请将新的reuseport参数添加到现有的listen指令中。
server { listen 12345 reuseport;
# ...
}要详细了解此功能,请参阅这篇博客文章。
注意:此功能需要Linux内核3.9或更高版本。Ubuntu 13.10及更高版本和Red Hat Enterprise Linux 7及更高版本均包含所需功能。
访问控制和安全增强功能
NGINX Plus R7新增了更多功能,有助于提升应用安全性。本节将概述这些功能。
TCP访问控制和限制
TCP代理和负载均衡的新功能改进了访问控制(按IP地址实施限制)、连接限制(限制每个客户端或服务的并发连接数)和带宽使用控制(限制每个连接的上行或下行带宽)。这些功能已用于HTTP负载均衡,并在API计量和DDoS防护方面取得了良好成效。
有关更多详细信息,请参阅相关博客文章《NGINX Plus R7中的TCP负载均衡<.htmlspan>》。
NTLM支持
应广大用户需求,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;
}现在,您可以放心地在Microsoft应用程序前端部署NGINX,将其用作代理、负载均衡器和HTTP/2加速器,从而支持尽可能广泛的客户端设备。
改进的监控和诊断
NGINX Plus提供详细的监控信息和统计数据,便于观察、优化和调试应用及基础设施。在此基础上,NGINX Plus R7新增了多项计数器和统计指标。这些计数器有助于调优NGINX Plus部署,并帮助您判断何时可能需要纵向或横向扩展以处理更高负载。新增的统计指标和计数器包括:
499错误:按服务器统计的计数器,用于跟踪499错误。当后端服务器尚未处理完请求,而客户端已关闭连接时,就会出现此类错误。少量499错误可以接受(用户经常会在会话过程中关闭Web浏览器),但大量此类错误可能表明服务器负载过高,处理请求耗时较长。- NGINX Plus工作进程重启次数:NGINX Plus工作进程的重启次数。这有助于检测NGINX Plus工作进程崩溃。
- NGINX Plus重新加载次数:NGINX Plus的重新加载次数。此指标可确认NGINX Plus是否已实际重新加载,或是否因配置不当等各种原因导致重新加载失败。
- 队列溢出:用于衡量每台服务器处理负载能力的计数器。队列溢出次数较多,表明服务器难以跟上负载需求。
- SSL握手:已完成的SSL握手次数。
- SSL会话重用:从先前会话中重用的SSL会话数量。
- 新建SSL会话:协商建立的新SSL会话数量。
与所有其他计数器一样,要启用新计数器,请在配置中添加api指令。
焕新升级的交互式NGINX Plus仪表盘
在R7中,NGINX Plus仪表盘得到显著改进,即使面对大型复杂配置,也能以简洁的格式显示关键系统信息:

- 新增的“仪表盘”概览选项卡可在单个页面中全面汇总NGINX Plus活动,并概述应用的运行状况。
- 仪表板上的界面支持临时向负载均衡池添加服务器或从中移除服务器,还可将服务器临时标记为正在排空或非活动状态。
- 借助新增的筛选器,可以快速缩小范围并找到故障服务器。
- 新的选项卡式视图支持从“Dashboard”选项卡快速切换到区域、上游和缓存信息的详细视图。
- 整个仪表板中的新工具提示提供了有关上游服务器、配置重新加载、缓存状态及所有错误消息的更多详细信息。
要了解更多信息,请参阅相关博客文章:全新NGINX Plus仪表板<.htmla>。
更多实用功能
NGINX Plus R7还包含多项不属于上述任何类别的增强功能:
- 改进的HLS流式传输:NGINX Plus现支持HLS
start、end和offset参数,这些参数可用于.m3u8 URI。内容发布者可以借此轻松发布视频流片段的链接。 - 内容修改:以前,NGINX Plus只能对响应内容进行一项简单修改,即用一个字符串替换另一个字符串。
sub_filter指令现已扩展,可支持变量和连续替换,从而实现更复杂的修改。扩展后的内容修改功能可轻松调整Web内容,例如更改消息内容中超链接的协议(使用https://而非http://)、域名或其他路径元素。还可以使用该功能在HTML页面中插入内容,例如样板文本或JavaScript代码片段,而无需修改原始HTML内容。 $upstream_connect_time变量:一个新的NGINX变量,用于跟踪连接到后端服务器所需的时间,从而更轻松地识别响应缓慢的服务器。- 配置转储:新的
‑T标志可让nginx命令以清晰、标准化的格式将解析后的NGINX配置转储到标准输出。这对于归档或提交支持工单非常有用。 - 可配置性更强的TCP负载均衡:
proxy_bind、proxy_protocol和tcp_nodelay指令,以及backlog参数(用于listen指令),现在不仅支持HTTP流量,也支持TCP流量(stream模块)。有关详细信息,请参阅NGINX Plus R7中的TCP负载均衡<.htmlspan>。 - Redis支持:第三方Redis模块(lua-resty-redis)现已内置于nginx-plus-extras软件包中。借助该模块,NGINX Plus可与Redis数据库交互(例如,获取和设置值);此模块作为NGINX Plus订阅的一部分,可获得全面支持。
- 更新了Phusion Passenger模块:Phusion Passenger Open Source模块已更新至版本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):
- 停止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
如果您正在运行NGINX Plus,强烈建议尽快升级到Release 7。升级后可获得多项修复和改进;如果需要提交支持工单,也有助于我们更好地提供帮助。安装和升级说明请参阅客户门户。
如果您尚未试用NGINX Plus,建议体验其Web加速、负载均衡和应用交付功能,也可将其用作获得全面支持的Web服务器,并使用增强的监控和管理API。立即开始免费试用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软件包之前,必须从配置中的所有
spdy参数中移除listen指令(将其替换为http2和ssl参数以启用HTTP/2支持)。安装nginx-plus-http2软件包后,如果任何listen指令包含spdy参数,NGINX Plus将无法启动。
关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
