2020-03-21 Nginx介绍

2020-03-21  本文已影响0人  阿丧小威

1. Nginx介绍

1.1 Nginx是什么

Nginx与Apache软件类似,Nginx(“engine x”)是一个开源的、支持高性能、高并发的WWW服务和代理服务软件。最初被应用在俄罗斯的大型网站www.rambler.ru上,后来作者将源代码以类BSD许可证的形式开源出来供全球使用。
Nginx因具有高并发(特别是静态资源)、占用系统资源少等特性且功能丰富而逐渐流行起来,到目前为止大有赶超Apache,而获得第一的趋势。
从软件大的功能应用方面来看,Nginx不仅是一个优秀的Web服务软件,还具有反向代理负载均衡功能和缓存服务功能。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS负载均衡以及Haproxy专业代理软件,但是Nginx部署起来更为简单、方便;在缓存服务功能方面,它又类似于Squid等专业的缓存服务软件。
Nginx可以运行在Unix、Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中。随着Nginx在国内很多大型网站的稳定高效运行,其近两年也逐渐被越来越多的中小型网站所使用。当前流行的Nginx Web组合被称为LNMP或LEMP(即Linux Nginx MySQL PHP)。

1.2 Nginx软件的使用排名

Web Server排行

1.3 Nginx的重要特性及应用场合

1.3.1 Nginx的重要特性

Nginx具备如下基本特性:

它所具备的其他WWW服务特性如下:

企业面试时需要解答如下Nginx HTTP服务器的特色及优点:

1.3.2 Nginx软件的主要企业功能应用

(1)作为Web服务软件
Nginx是一个支持高性能、高并发的Web服务软件,它具有很多优越的特性,作为Web服务器,和Apache相比,Nginx能够支持更多的并发连接访问,而占用的资源却更少,效率更高,在功能上也强大了很多,几乎不逊色于Apache,而且Nginx更新频率更快,社区用户更火爆。
(2)反向代理或负载均衡服务
在反向代理或负载均衡服务方面,Nginx可以作为Web服务、PHP等动态服务及Memcached缓存的代理服务器,它具有类似专业反向代理软件(如Haproxy)的功能,同时也是一个优秀的邮件代理服务软件(最早开发这个产品的目的之一也是作为邮件代理服务),在Nginx的代理功能方面,已经支持TCP和UDP的代理,Nginx的代理功能已经越来越强大了。
(3)前端业务数据缓存服务
在Web缓存服务方面,Nginx可通过自身的proxy_cache模块实现类Squid等专业缓存软件的功能。
Nginx的这三大功能(作为Web服务软件、反向代理或负载均衡服务、前端业务数据缓存服务)是国内用户使用Nginx的主要场景。

2. Nginx Web服务

2.1 Nginx Web服务介绍

Nginx作为Web服务器的主要应用场景:

2.2 Nginx与其他Web软件产品的对比说明

Apache软件的特点如下:

Nginx软件的特点如下:

Lighttpd的特点如下:

2.3 Web服务产品的性能对比测试

下图为各种Web服务产品在静态数据访问性能上的对比,从图中可以看出,处理静态小文件(小于1MB)时,Nginx和Lighttpd比Apache更有优势,Nginx处理小文件优势明显,Lighttpd综合性最强。

主流Web服务静态数据性能对比图

下图是各类Web服务器在动态数据性能上的对比,从图中可以看出,在处理动态数据时,三者的差距不大,但apache更有优势一点。这是因为处理动态数据的能力取决于PHP(java)和后端数据库提供的服务能力,也就是说瓶颈不在Web服务器上。一般情况下普通PHP引擎支持的并发连接参考值为300~1000,Java引擎的并发连接参考值为300~1500,而数据库的并发连接参考值为300~1500。业务场景及网站架构的不同,也会导致并发连接数上下浮动。

主流Web动态数据性能对比图

2.4 为什么Nginx总体性能比Apache高

Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached软件都采用的是epoll模型。
处理大量连接的读写,Apache所采用的select网络I/O模型比较低效。下面用两个通俗的比喻来解释Apache采用的select模型和Nginx采用的epoll模型之间的区别。
1. 第一个比喻
假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。“select版”宿管人员会带着你的朋友挨个房间去找,知道找到你为止。而“epoll版”宿管人员会先记下每位入住同学的房间号,当你的朋友来找你时,他只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满宿舍楼找人。如果同时来了100个人,都要找自己住在这栋楼的同学,select版和epoll版宿管人员,谁的效率更高,就很明显了。
2. 第二个比喻
select的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看一群孩子,如果把孩子是否需要上厕所比作网络I/O事件,select的作用就好比这个保姆挨个询问每个孩子:你要上厕所吗?如果孩子回答是,保姆把孩子领出来放到另外一个地方。当询问完所有的孩子之后,保姆领着这些要上厕所的孩子去厕所(处理网络I/O事件)。
还是以保姆照看一群孩子为例,在epoll机制下,保姆不再需要挨个询问每个孩子是否需要上厕所。取而代之的是,每个孩子如果需要上厕所,自己主动去实现约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去厕所(网络事件处理)。因此,epoll的这种机制,能够高效地处理成千上万的并发连接,而且性能不会随着连接的增加而下降太多。
3. Apache select和Nginx epoll的区别

Apache select和Nginx epoll的区别
上一篇 下一篇

猜你喜欢

热点阅读