F5 NGINX 核心人员倾力打造,搞懂 NGINX 这一本就够了
Nginx 因其轻量化、支持高并发等特性,在国内大量企业广泛的使用。作为全球 Web 服务器的领导者,它备受业界瞩目,目前正以蓬勃之势迅速发展,并将以无可替代之势称霸未来。它因优异的性能和强大的可维护性受到了广大应用开发者的喜爱,也给企业带来了巨大的商业价值。
NGINX 的由来:C10K 问题
NGINX 最初是为解决著名的 C10K 问题而设计的。NGINX 能有效地提高单台 Web 服务器响应并发请求的能力,与传统的 Apache 相比,在内存使用量和每秒处理的并发请求数方面都有巨大的改进。
究其根本,Apache 会为每个请求分别创建新进程,而 NGINX 采用异步非阻塞的事件驱动机制,并在内存数据复制方面做了优化。NGINX 与 Apache 在高并发情况下的内存使用量如下图:
高并发情况下 Apache 和 NGINX 的
内存使用量对比
可以看出,随着并发连接数的增加,NGINX 的内存使用量并没有明显变大,NGINX 只使用不到 Apache 十分之一的内存就可以处理和它相同的并发连接数。
另外,随着并发连接数的增加,NGINX 每秒处理的请求数虽然有所减少,但仍为 Apache 每秒处理的请求数的数倍,如下图:
并发连接数增加时 Apache 和 NGINX
每秒处理的请求数对比
NGINX 市场占有率持续攀升
2021 年 1 月的 Netcraft Web 服务器市场占有率分析报告显示,NGINX 的市场占有率已经超过了 Apache 和 Microsoft,位居第一。
1995 年 8 月以来的 Web 服务器市场占有率变化在线活跃服务器中,NGINX 的使用率排在第三位,且持续攀升。
Netcraft Web 服务器市场占有率分析图
NGINX 的优良特性和功能
NGINX 作为 Web 服务器,被大量高负荷网站(腾讯、新浪、网易、淘宝等)广泛使用,具备 Apache、Lighttpd、Tomcat 等服务器不具备的优良特性:
高并发。能够处理高并发请求是 NGINX 最显著的特点。NGINX 由 C 语言编写,采用事件驱动模式,异步非阻塞地处理海量并发请求。worker 进程默认亲和到不同的 CPU 核上,避免了不同进程抢占 CPU 资源的问题和调度带来的开销。NGINX 还针对不同的操作系统做了不同的优化,比如在选择事件队列时,Darwin 系统选择 kqueue,Linux 系统选择 epoll,Windows 系统选择 select。
高稳定性。模块化的架构使 NGINX 各部分的功能完全解耦,master 进程和 worker 进程一对多的方式分开了控制层面和数据层面,确保在 worker 进程发生异常时能够及时发现并纠正,也给它的热升级提供了可能性。另外,NGINX 没有采用多线程的方式来实现 worker 进程,使得各个 worker 进程相对独立。
高扩展性。NGINX 以模块为单位组织相应的配置解析和功能实现,做到了模块内高内聚,模块间低耦合。一些常用的数据结构(如链表、队列、红黑树)都做了有效的封装,供开发者使用。
NGINX 的应用场景广泛,核心功能如下:
反向代理。相比正向代理,反向代理运行于服务器端,代表服务器端接收来自客户端的请求,并将后端服务器给出的响应返回给客户端。反向代理运转稳定,配置灵活,对七层(HTTP)和四层(TCP/UDP)均可提供代理。NGINX 的反向代理功能通常会和其他核心功能联用,比如跟负载均衡功能联用,可以实现带权重的请求转发,以及限流和灰度发布。
负载均衡。当今互联网环境日益复杂,单台服务器的处理能力已经不能满足高并发环境下的响应要求,因此我们需要使用负载均衡的方式,水平扩展出多台服务器均摊处理并发的请求。NGINX 提供了针对 HTTP、TCP 和 UDP 的负载均衡,以及多种内置策略(如轮询、加权轮询、IP 和 cookie hash 等),让用户能够根据自己业务的流量特点,按照特定的规则分流来自前端的请求。NGINX 还给予了用户扩展策略的能力,用户可以添加新的 NGINX 模块来定制策略。有些客户端的请求是无状态的,有些是包含状态的,即长连接,NGINX 提供了共享内存映射机制和 hash、IP hash 等策略来实现会话亲和。NGINX 的负载均衡同时也包含检查上游服务器状态的能力。
静态缓存。据统计,Web 应答流量中有超过一半的数据是静态资源,我们可以使用静态缓存把这些资源缓存下来。NGINX 的静态缓存功能有效减少了服务器在计算和传输静态资源时产生的性能消耗,配以 gzip 功能还可以减少网络带宽的消耗。静态资源包括动态页面中的静态部分、静态页面和资源文件等。
Web 服务器。Web 服务器是 NGINX 的基础功能。用户可以使用 server 配置块定义自己的 Web 服务器,如监听 IP 端口、协议类型、SSL 及网络传输行为;使用 location 配置块定义 URL 及请求发生时的响应逻辑。NGINX Unit 是 NGINX 商业版提供的轻量级动态服务器方案,其中集成了多种主流语言(如 Python、PHP、Go、JavaScript、Ruby、Java 等)的运行时环境,可以独立运行于宿主机或者容器中。
安全和访问控制。NGINX 提供了丰富的安全和访问控制功能,这些功能中有些是通过 NGINX 核心模块实现的,有些是通过第三方模块实现的。NGINX 商业版对这些功能做了进一步增强。以下是常见的安全和访问控制场景。
a.SSL 卸载/加载:实现对四层、七层服务器流量的 SSL 加解密。
b.HTTP 认证访问控制:实现对前端请求 JWT 或 Basic Auth 的认证方式。
c.针对特定资源的访问控制:针对资源的类型或者访问者地址做控制。
d.动态黑白名单:针对客户端 IP 或 keyval 模块实现基于 IP 的访问控制。
NGNIX 开发看这一本就够了
《NGNIX 经典教程》
F5 NGINX 核心人员倾力打造
关注基础、用法和现代场景
林静,刘旭峰,章澍,
廖健雄,宗兆伟,邹俊 | 著
本书分为 5 个部分,共 32 章:
第一部分为基础入门篇,介绍 NGINX 的基础配置、运行机制与原理;
第二部分为开源功能篇,剖析 NGINX 开源软件的功能模块,讲述各个模块的功能集合;
第三部分为应用场景篇,通过特定的场景展现 NGINX 的能力及配置方法,站在使用者的角度阐述 NGINX 的复杂应用场景及注意事项;
第四部分为商业软件篇,介绍 NGINX 商业版模块的增强能力;
最后是 NJS 开发篇,使用 NJS 脚本化的方式扩展 NGINX 的能力。
本书思维导图
读者对象
软件开发工程师;运维工程师;系统工程师;软件架构师;DevOps 人员
作者简介
林静,F5 软件架构师,应用交付领域专家,开源爱好者,NGINX 布道师,拥有 TOGAF 9、CKA 等认证。
刘旭峰,F5 中国区金融行业技术总监,先后任职于 IBM、F5 等公司,专注于数据中心架构、金融科技应用、开源软件技术、IaaS/PaaS 等领域。
章澍,F5 中国区高级销售总监,领导过不同的行业销售团队,见证了各行业 IT 建设和发展的不同阶段,深度了解客户在 NGINX 使用中的技能痛点和需求。
廖健雄,F5 NGINX 专家,在金融科技、开源软负载、业务高并发等领域具备丰富的架构规划、产品研发经验。
宗兆伟,F5 资深软件研发工程师,涉及的技术领域包括数据存储、云原生生态、DevOps 领域,深入理解云生态中的各种技术。
邹俊,先后供职于 CA、EMC、Pivotal、F5 等公司,积累了丰富的容器云平台相关经验,主要关注微服务、APIM、Kubernetes 等行业技术的发展
大咖推荐
应用流量技术复杂,企业掌握和使用负载均衡器、服务网关面临着很大的挑战。NGINX 提供了一个高性能、易使用、安全可靠的开源平台,为企业现代化应用提供了坚实的保障。本书提供了丰富的 NGINX 实践案例,是一本干货满满的参考书,可以帮助用户更好地理解与使用 NGINX。
——刘博,中国农业银行研发中心技术平台工程师
本书的重点立足于实际应用场景,通过 NGINX 在各个不同场景的部署与配置方式,完整地梳理了一个大型企业在多云架构、微服务、复杂的访问调度等场景下以及面对新技术挑战时的解决方案,对于读者和用户都是非常实用的解决思路指引与解决方案参考。
——曾炜,中国工商银行软件开发中心高级技术经理,网络与安全专家
NGINX 自诞生至今已经十几年了,一直处于活跃开发状态,其新版本持续增加强大的功能,满足云计算、微服务等各种场景下的技术应用需求。市面上的图书或侧重 NGINX 源码的解析,或侧重 NGINX 原理及配置的介绍,但站在使用者视角对 NGINX 复杂应用场景的解读和指导性资料相对稀少。本书的一大亮点是,作者通过特定的场景展现 NGINX 的能力及配置方法,涵盖了 Web 服务器、反向代理、DevOps、API、Kubernetes、NJS 开发、安全等当前 NGINX 的各种使用场景,注重实战,对使用 NGINX 的开发工程师、软件架构师、运维工程师均具有重要的参考价值。
——王丽丽,中信银行架构师,开源治理专家
NGINX 在我身边的工作环境中,正逐渐变得无处不在。对于处在数字化转型过程中的银行业而言,NGINX 的高并发处理能力与丰富灵活的功能特性,使得它成为数据中心世界里非常重要的一个组成部分。细读一下这本书的目录,你会发现原来通过 NGINX 还可以做更多的事情,而不需要追加 IT 投资去进行重复建设。
——王钢,江苏银行科技部总经理助理
学习 NGINX,一键拥有
版权声明: 本文为 InfoQ 作者【图灵教育】的原创文章。
原文链接:【http://xie.infoq.cn/article/e06a21d3fb694ed168ec48e7b】。文章转载请联系作者。
评论