美文网首页
2020-03-21 Nginx介绍

2020-03-21 Nginx介绍

作者: 阿丧小威 | 来源:发表于2020-03-21 16:03 被阅读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具备如下基本特性:

    • 可针对静态资源高速高并发访问及缓存。
    • 可使用反向代理加速,并且可进行数据缓存。
    • 具有较完善的负载均衡、节点健康检查和容错功能。
    • 支持远程FastCGI服务的缓存加速。
    • 支持FastCGI、Uwsgi、SCGI、and Memcached Servers的加速和缓存。
    • 支持SSL、TLS、SNI。
    • 具有模块化的架构:过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI及图像缩放等功能。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理。

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

    • 支持基于名字、端口以及IP的多虚拟主机站点。
    • 支持Keep-alive和pipelined连接。
    • 可进行简单、方便、灵活的配置和管理。
    • 支持修改Nginx配置,并且在代码上线时,可平滑重启,不中断业务访问。
    • 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志。
    • 可利用信号控制Nginx进程。
    • 支持3xx-5xx HTTP状态码重定向。
    • 支持rewrite模块,支持URI重写及正则表达式匹配。
    • 支持基于客户端IP地址和HTTP基本认证的访问控制。
    • 支持PUT、DELETE、MKCOL、COPY以及MOVE等较特殊的HTTP请求方法。
    • 支持FLV流和MP4流技术产品应用。
    • 支持HTTP相应速率限制。
    • 支持同一IP地址的冰法连接或请求数限制。
    • 支持HTTP、TCP、UDP、邮件服务等多种协议服务代理能力。

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

    • 支持高并发:能支持几万并发连接(特别是静态小文件业务环境下)。
    • 资源消耗小:在3万并发连接下,开启10个Nginx线程消耗不到200MB内存。
    • 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS功能。
    • 具备Squid等专业缓存软件等的缓存功能。
    • 支持异步网络IO事件模型epoll(Linux 2.6+)。
    • 最新版同时支持HTTP、TCP、UDP、邮件服务等多种协议服务代理能力。
    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服务器的主要应用场景:

    • 使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似Lighttpd软件)。
    • 使用Nginx运行MP4、FLV等视频流媒体服务。
    • Nginx结合FastCGI运行PHP等动态程序(常用fastcgi_pass方式)。
    • Nginx结合Tomcat/Resin等支持Java动态程序(常用proxy_pass方式)。
    • Nginx结合Uwsgi等支持Python动态程序(常用uwsgi_pass方式)。

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

    Apache软件的特点如下:

    • 2.2版本非常稳定强大,据官方说,其2.4版本性能更强。
    • Prefork模式取消了进程创建开销,性能很高。
    • 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在于Apache本身上。
    • 高并发时消耗系统资源相对多一些。
    • 基于传统的select模型,高并发功能有限。
    • 支持扩展库,可通过DSO、apxs方法编译安装额外的插件功能,不需要重新编译Apache。
    • 功能多,更稳定,更安全,插件也多。
    • 市场份额在逐年递减,截至2020年3月已经降到39.9%。

    Nginx软件的特点如下:

    • 基于异步网络I/O模型(epoll、kqueue)。
    • 具备支持高性能,高并发的特性,并发连接可达数万。
    • 对小文件(小于1MB的静态文件)高并发支持很好,性能很高。
    • 不支持类似Apache的DSO模式,扩展库必须编译进主程序(缺点)。
    • 进程占用系统资源比较低。
    • 支持动态Web、反向代理、缓存三大重点功能,并且都很优秀。
    • 市场份额在逐年快速增加,截至2020年3月已经升到31.8。

    Lighttpd的特点如下:

    • 基于异步网络I/O模型,性能、并发都和Nginx相近。
    • 扩展库是SO模式,比Nginx灵活。
    • 目前国内的使用率比较低,安全性没有Apache和Nginx好。
    • 通过插件(mod_secdownload)可实现文件URL地址加密(优点)。
    • 社区不活跃,市场份额较低,截至2020年3月已经降到0.1%。

    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的区别

    相关文章

      网友评论

          本文标题:2020-03-21 Nginx介绍

          本文链接:https://www.haomeiwen.com/subject/etuyyhtx.html