1.1.1 开源版Nginx
Nginx开源版一直处于活跃开发状态,由Nginx公司负责开发与维护。截至本书写作时,Nginx开源版本已经更新到1.17.2版本。Nginx自推出以来,一直专注于低资源消耗、高稳定、高性能的并发处理能力,除了提供Web服务器的功能外,还实现了访问代理、负载均衡、内容缓存、访问安全及带宽控制等功能。其基于模块化的代码架构及可与其他开发语言(如Perl、JavaScript和Lua)有效集成的可编程特性,使其具有强大的扩展能力。
部署和优化具有高效率、高性能并发请求处理能力的应用架构是应用架构师一直追求的目标,在应用架构技术的迭代中,各种分离式思想成为主流,比如将访问入口和Web服务器分离、将Web服务器和动态脚本解析器分开、将Web功能不断拆分、微服务等。Nginx不仅提供了Web服务器的功能,还极大满足了这一主流架构的需求并提供了如下应用特性。
(1)访问路由
现今大型网站的请求量早已不是单一Web服务器可以支撑的了。单一入口、访问请求被分配到不同的业务功能服务器集群,是目前大型网站的通用应用架构。Nginx可以通过访问路径、URL关键字、客户端IP、灰度分流等多种手段实现访问路由分配。
(2)反向代理
就反向代理功能而言,Nginx本身并不产生响应数据,只是应用自身的异步非阻塞事件驱动架构,高效、稳定地将请求反向代理给后端的目标应用服务器,并把响应数据返回给客户端。其不仅可以代理HTTP协议,还支持HTTPS、HTTP/2、FastCGI、uWSGI、SCGI、gRPC及TCP/UDP等目前大部分协议的反向代理。
(3)负载均衡
Nginx在反向代理的基础上集合自身的上游(upstream)模块支持多种负载均衡算法,使后端服务器可以非常方便地进行横向扩展,从而有效提升应用的处理能力,使整体应用架构可轻松应对高并发的应用场景。
(4)内容缓存
动态处理与静态内容分离是应用架构优化的主要手段之一,Nginx的内容缓存技术不仅可以实现预置静态文件的高速缓存,还可以对应用响应的动态结果实现缓存,为响应结果变化不大的应用提供更高速的响应能力。
(5)可编程
Nginx模块化的代码架构方式为其提供了高度可定制的特性,但可以用C语言开发Nginx模块以满足自身使用需求的用户只是少数。Nginx在开发之初就具备了使用Perl脚本语言实现功能增强的能力。Nginx对JavaScript语言及第三方模块对Lua语言的支持,使得其可编程能力更强。
Nginx开源版本维护了两个版本分支,分别为主线(mainline)分支和稳定(stable)分支。主线分支是一个活跃分支,会添加一些最新的功能并进行错误修复,由版本号中的第二位奇数标识,截至本书写作时的最新版本为1.17.2。稳定分支会集成修复严重错误的代码,但不会增加新的功能,由版本号中的第二位偶数标识,截至本书写作时的最新版本为1.16.1。想了解更多内容的用户可参阅官方网站http://www.nginx.org。