1. Nginx是什么?

如果你听说过或使用过Apache软件,那么很快就会熟悉Nginx软件,与Apache软件类似
Nginx是一个开源的、支持高性能、高并发的WWW服务和代理服务软件。它是由俄罗斯人Igor Sysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上。后来作者将源代码以类BSD
许可证的形式开源出来供全球使用。
Nginx因具有高并发(特别是静态资源)、占用系统资源少等特性,且功能丰富而逐渐流行起来。

  1. 从软件的功能应用方面,Nginx不但是一个优秀的web服务软件,还可以具有反向代理负载均衡<br />功能和缓存服务功能。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS负载均衡以及haproxy专业代理软件,但Nginx部署起来更简单、方便;在缓存服务功能方面,它又类似于squid等专业的缓存服务软件。
  2. Nginx可以运行在UnixLinuxBSDMac OS XSolaris,以及Microsoft Windows等操作系统中。随着Nginx在国内很多大型网站的稳定高效运行,近两年也逐渐被越来越多的中小型网站所<br />使用。当前流行的Nginx web组合被称为LNMPLEMP(即Linux Nginx Mysql PHP),其中LEMP里的E取自Nginx(“engine x”)。

2. Nginx软件的使用排名

Nginx介绍 - 图1

数据来源:https://w3techs.com/technologies/overview/web_server/all

3. Nginx的发展趋势

Nginx介绍 - 图2

数据来源:https://news.netcraft.com/

4. Nginx的重要特性及应用场合

4.1 Nginx的重要特性

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

  • 可针对静态资源高速高并发访问及缓存;
  • 可使用反向代理加速,并且可进行数据缓存;
  • 具有简单负载均衡、节点健康检查和容错功能;
  • 支持远程FastCGI服务的缓存加速;
  • 支持FastCGI、Uwsgi、SCGI、and Memcached Servers的加速和缓存;
  • 支持SSL、TLS、SNI;

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

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

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

  • 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)。
  • 资源消耗少:在3万并发连接下,开启10个Nginx线程消耗不到200M内存。
  • 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,

这相当于专业haproxy软件或Lvs的功能。

  • 具备squid等专业缓存软件等的缓存功能。
  • 支持异步网络IO事件模型epoll(Linux2.6+)

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

  • 作为web服务软件

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

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

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

5. Nginx WEB服务介绍

Nginx安装简单,配置文件简介,而且配置灵活。近两年来,Nginx在国内互联网领域的使用
日趋火热,越来越多的网站开始使用,如淘宝、阿里、京东、小米、网易、新浪、赶集等。

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

  • 使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似lighttpd软件)。
  • Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)。
  • Nginx结合tomcat/resin等支持Java动态程序(常用proxy_pass)。

6. 常见Nginx web服务区别

6.1 nginx与其他web软件产品的对比说明

先来看看Apache的软件特点,如下:

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

在来看看Nginx的软件特点,如下:

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

最后看Lighttpd的特点,如下:

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

7. 为什么Nginx总体性能比Apache高?

Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而
Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的squid、Memcached软件都采用的是epoll模型。
处理大量连接的读写,Apache所采用的select网络I/O模型比较低效。下面用两个通俗的比喻来解释Apache采用select模型和Nginx采用的epoll模型自己的区别。
Nginx介绍 - 图3

Nginx介绍 - 图4

8. Apache select和Nginx epoll区别技术对比

两者的区别如下表所示:

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

9. 如何正确选择web服务器

虽然国内很多人都在使用Nginx,但是Apache、lighttpd这两个web server同样非常强大
实用,尤其是Apache,到目前为止仍是全球使用最广泛的web服务软件。

静态业务:若是在高并发场景,尽量采用Nginx或lighttpd,首选Nginx。
动态业务:理论上采用Nginx和Apache均可,建议选择Nginx,要避免相同业务服务软件多样化,
额外增加维护成本。动态业务可以由Nginx兼做前端代理,在根据页面元素的类型或者
目录,向后转发到后端相应的服务器进行处理。
如果既有静态业务又有动态业务:就采用Nginx。
如果并发不是很大,又对Apache很熟悉,采用Apache也是可以的,Apache2.4版本也很强大,
并发连接数也有所增加。总的来说,在满足需求的前提下,先选择自己最擅长的软件,若看上了更好的软件,可在掌握新软件之后逐步替换。虽然动态业务和静态业务都倾向于选择Nginx,单身大前提是要自己要熟练掌握Nginx。切记企业工作中不要盲从,这可能最终会导致自己无法控制给企业带来灾难的恶果。