导语:Nginx是一个风靡全球的服务器高性能的HTTP和反向代理服务器,也是一个通用的TCP/UDP代理服务器,最初由俄罗斯人Igor Sysoev编写,BAT、京东 、新浪、网易、Facebook等这些 Top 级公司都将其作为企业 IT 架构的一部分。它可以轻松在百万并发连接下实现高吞吐量的 Web 服务,同时诸多应用场景下的问题都可以通过种种 Nginx 模块得以解决。
在互联网与我们生活已密不可分的今天,大规模、高性能的网站架构技术已成为每个互联网技术人员的必备技能。Nginx作为一款开源的Web服务器软件,因其具有性能稳定、高并发、低内存耗用、高性能的处理能力等特点,而被广泛应用到国内外各互联网厂商的实际生产架构中。由于互联网技术迭代非常快,云计算、微服务等新技术层出不穷,Nginx也一直处于活跃开发的状态,并在新版本中增加了很多强大的功能,与这些新技术紧密集成。同时基于其开源版本衍生出来的OpenResty和淘宝的Tengine等软件也根据自身需求提供了优秀的扩展功能,满足了云计算、微服务等各种技术的应用需求,并在实际生产环境中得到了广泛应用。
作为一款Web服务器软件,Nginx实现了Web服务器的基本功能,用户通过简单的配置指令就可以快速完成Web服务器的搭建。它还是网络通信协议处理软件,支持TCP/UDP、HTTP、HTTP/2、gRPC、FastCGI、SCGI、uWSGI、WebDAV等协议的处理,并实现了相应通信协议的请求解析、长连接、代理转发、负载均衡、会话保持等互联网架构中常见的应用功能。同时,它还是一款高并发服务软件,其采用的固定数量的多进程模型、事件驱动处理机制、工作流处理方式及模块化架构等软件开发设计,已成为高并发服务软件开发的典范。
Nginx的产生
Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。
Apache的发展时期很长,曾是世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。
由于:Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接;
高度的模块化和自由软件许可证是的第三方模块层出不穷;
Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
这些优秀的设计带来的极大的稳定性,所以,Nginx火了!早在2019 年 2 月,Nginx 就取代 Apache HTTPD,成为互联网上部署最广泛的服务器。据 Netcraft在Web服务器调查显示,NGINX 的市场份额超过40%。
Nginx的主要应用场景:
如果你是一个前端工程师,在用 Node.js 写 Web 程序,使用 Nginx 可以让你高效处理静态资源文件;
如果你是一个运维工程师,那么在你有效配置 Nginx 后,可以为公司节省大量的 IT 成本;
如果你是一个后端开发工程师,遇到性能瓶颈时,你完全可以使用 Nginx 的第三方模块或 OpenResty 的 Lua 模块,非常高效地解决你的性能瓶颈。
如何写好Nginx:
Nginx自诞生至今已有十几年时间,虽然相关资料很多,但国内可获得的资料很多是直接翻译自官方文档,这些资料让读者只是停留在知其然而不知其所以然的层面,即便有深入讲解某一功能的资料,也仅能让读者管中窥豹,而无法全面了解Nginx的功能并在实际工作中熟练应用。
RECOMMEND
推荐阅读
01
《深入理解Nginx:模块开发与架构解析(第2版)》
陶辉 著
点击购买
推荐理由:本书致力于说明开发Nginx模块的必备知识,书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法;然后介绍如何开发HTTP模块来得到定制化的Nginx;接着,综合Nginx框架代码分析了Nginx架构的设计理念和技巧。第2版新增了如何在模块中支持HTTP变量,以及与slab共享内存等相关的内容。可帮助读者更好地开发出功能丰富、性能一流的Nginx模块。
02
《Nginx应用与运维实战》
王小东 著
点击购买
推荐理由:这是一部基于Nginx新版本和云原生应用场景系统讲解Nginx的著作,是作者十余年运维经验的总结。本书从应用、运维以及与Kubernetes和微服务集成3个维度对Nginx的基础知识、工作原理、核心应用、运维管理、集成扩展等重点内容进行了全面、细致的讲解。完全以实战为导向,包含大量的配置案例和示例代码,能帮助读者快速掌握并在实际工作中熟练应用Nginx。
更多精彩回顾
上新 | 首本深入讲解Linux内核观测技术BPF的书上市!
书单 | 《天才引导的历程》| 西安交通大学送给准大一新生的礼物
收藏 | 揭秘阿里巴巴的客群画像