Nginx基础介绍(一)

第1章 Nginx介绍

1.1 什么是nginx

Nginx(“engine X”)是一个开源的,支持高性能、高并发的www服务和代理服务软件。它是由俄罗斯人Igor Sysoev开发的,最初被应用在俄罗斯的大型网站www. rambler.ru上,后来作者将源代码以类BSD许可证的形式开源出来供全球使用。

Nginx因具有高并发(特别是静态资源)、占用系统资源少等特性,且功能丰富而逐渐流行起来。(静态小文件)

在功能应用方面,Nginx不但是是一个优秀的web服务软件,还具有反向代理负载均衡功能和缓存服务功能。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS负载均衡及Haproxy等专业代理软件,但是Nginx部署起来更为简单方便;在缓存服务功能方面,他又类似于Squid等专业的缓存服务软件。

Nginx可以运行在UNIX、Linux、BSD、Mac OS X、Solaris,以及Windows等操作系统中。随着Nginx在国内很多大型网站中的稳定高效运行,近两年它也逐渐被越来越多的中小型网站所使用。当前流行的Nginx Web组合被称为LNMP或LEMP(即Linux/Nginx/Mysql/PHP),其中LEMP里的E取自Nginx(“engine X”)。

Nginx的官方介绍见http://nginx.org/en/

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

1.2.1 Nginx的重要特性

Nginx在诞生之初的功能较弱,随着近几年各种功能特性逐渐增多并且日趋成熟,很多大型网站也卸了一些功能模块并开源出来,这使得Nginx变得越来越强大了。

  • Nginx具备如下基本特性:
  1. 可针对静态资源高速高并发访问及缓存
  2. 可使用反向代理加速,并且可进行数据缓存
  3. 具有简单的负载均衡,节点健康检查和容错功能
  4. 支持远程fastcgi服务的缓存加速
  5. 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和缓存
  6. 支持SSL、TLS、SNI
  7. 具有模块化的架构:过滤器包括gzip压缩、ranges支持、chunked相应、XSLT、SSI及图形缩放等功能,在SSI过滤器中,一个包含多个SSI的页面如果经由FastCGI或反向代理处理,可被并行处理。
  • 它所具备的其他www服务特性如下:
  1. 支持基于域名、端口和IP的多虚拟主机站点
  2. 支持Keep-alive和pipelined连接
  3. 可进行简单、方便、灵活的配置和管理
  4. 支持修改Nginx配置,并且在代码上线时可平滑重启,不中断业务访问
  5. 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志
  6. 可利用信号控制Nginx进程
  7. 支持3xx-5xx HTTP状态码重定向
  8. 支持rewrite模块,支持URI重写及正则表达式匹配
  9. 支持基于客户端IP地址和HTTP基本认证的访问控制
  10. 支持PUT、DELETE、MKCOL、COPY及MOVE等较特殊的HTTP请求方法
  11. 支持FLV流和MP4流技术产品应用
  12. 支持HTTP响应速率限制
  13. 支持同一IP地址的并发连接或请求数限制
  14. 支持邮件服务代理
  • 面试时回答Nginx HTTP服务器的特色及优点:
  1. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
  2. 资源消耗少:在3万并发连接下,开启10个Nginx线程小号的内存不到200MB
  3. 可以做HTTP反向代理及加速缓冲,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS的功能
  4. 具备Squid等专业缓存软件的缓存功能
  5. 支持异步网络I/O事件模型epoll(Linux 2.6+)
总结:高并发–>资源消耗少–>功能多样(web服务/负载均衡/支持缓存)–>通讯模型先进(epoll)

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

Nginx的三大功能(web服务、反向代理或负载均衡服务、前端业务数据缓存服务)是国内使用Nginx的主要场景,特别是前两个。

  • 作为web服务软件

Nginx是一个支持高性能、高并发的web服务软件,它具有很多优秀的特性,作为web服务器与Apache相比:Nginx能够支持更多的并发连接访问,但占用的资源确更少,效率更高;在功能上也强大了很多,几乎不逊色于Apache。

  • 反向代理或负载均衡服务

在反向代理或负载均衡服务方面,Nginx可以作为web服务、PHP等动态服务及Memcached缓存的代理服务器,它具有类似专业反向代理软件(如Haproxy)的功能,同时也是一个优秀的邮件代理服务软件(最早开发这个产品的目的之一就是作为邮件代理服务),同时Nginx 1.9.0版本后已开始支持TCP代理。

  • 前端业务数据缓冲服务

在web缓冲服务方面,Nginx可通过自身的proxy_cache模块实现类Squid等专业缓存软件的功能。

第2章 Nginx web服务

2.1 Nginx web服务介绍

Nginx安装简单,配置文件简洁,而且配置灵活,越来越多的网站开始使用,如淘宝、阿里、京东、小米、网易、新浪、赶集等。

  • Nginx作为Web服务器的主要应用场景包括:
  1. 使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似Lighttpd软件)
  2. Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)
  3. Nginx结合Tomcat/Resin等支持Java动态程序(常用proxy_pass方式)

2.2 Nginx与其他web软件的对比说明

2.2.1 Nginx软件特点

  • 基于异步网络I/O模型(epoll、kqueue)
  • 具备支持高性能,高并发的特性,并发连接可达数万
  • 对小文件(小于1MB的静态文件)高并发支持很好,性能很高
  • 不支持类似Apache的DSO模式,扩展库必须编译进主程序(缺点)
  • 进程占用系统资源比较低
  • 支持web、反向代理、前端缓存三大重点功能,并且都很优秀

2.2.2 Apache软件特点

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

2.2.3 Lighttpd软件特点

  • 基于异步网络I/O模型,性能、并发都与Nginx相近
  • 扩展库是SO模式,比Nginx灵活
  • 安全性没有Apache和Nginx好
  • 通过插件(mod_secdownload)可实现文件URL地址加密(优点)
  • 社区不活跃,市场份额较低

2.3 web服务产品性能对比测试

图片[1]|Nginx基础介绍(一)|leon的博客

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

图片[2]|Nginx基础介绍(一)|leon的博客

上图为各类web服务器在动态数据性能上的对比,从上图可以看出:在处理动态数据时,三者的差距不大,Apache更有优势一点,这是因为处理动态数据的能力取决于PHP(Java)和后端数据库的服务能力,也就是说瓶颈不在web服务器上。一般情况下普通PHP引擎支持的并发连接参考值为300-1000,Java引擎和数据库的并发连接参考值为300-1500。

2.4 Nginx总体性能比Apache高的原因

Nginx使用最新的epoll(Linux 2.6 内核)和kqueue(freeBSD)异步网络I/O模型,而Apache使用的是传统的Select模型。目前Linux下能够承受高并发访问的Squid、Memcached软件采用的都是epoll模型,处理大量连接的读写时,Apache所采用的select网络I/O模型比较低效。

2.4.1 Select模型和epoll模型的区别

select的调用复杂度是线性的,即O(n)。select模型会将所有的网络I/O事件遍历一遍后,再将要处理的网络I/O事件进行处理,而epoll会定义一个“监控点”,当有网络I/O事件时,事件会被记录在“监控点”内,而epoll定期查看“监控点”,如果有要执行的事件则直接执行事件。因此epoll的这种机制能够高效地处理成千上万的并发连接,而且性能不会随着连接数增加而下降太多。

  • Apache select和Nginx epoll的技术对比:
指标 select epoll
性能 随着连接数的增加性能急剧下降,处理成千上万并发连接数时性能很差 随着连接数的增加,性能基本上没有下降,处理成千上万并发连接时性能很好
连接数 连接数有限制,处理的最大连接数不超过1024,如果要处理的连接数超过1024个,则需要修改FD_SETSIZE宏,并重新编译 连接数无限制
内在处理机制 线性轮询 回调callback
开发复杂性

2.5 如何正确选择web服务器

在实际工作中我们要根据业务需求来选择合适的业务服务软件,建议如下:

  • 静态业务:若是高并发场景尽量采用Nginx或Lighttpd,二者首选Nginx
  • 动态业务:理论上采用Nginx和Apache均可,建议选择Nginx,为了避免相同业务的服务软件多样化,增减额外维护成本。动态业务可以由Nginx兼做前端代理,再根据页面元素的类型或目录转发到后端相应的服务器进行处理。
  • 既有静态业务又有动态业务:采用Nginx
温馨提示:本文最后更新于2022-12-20 20:57:53,已超过483天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/372.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享