nginx和apacheweb服务器

nginx和apacheweb服务器,apache,architecture,webserver,nginx,Apache,Architecture,Webserver,Nginx,这个问题不是nginx对apache。我对NGinx相对于Apache的架构优势更感兴趣。正如我所能理解的- nginx是一种异步、事件驱动的web服务器,其性能远远优于Apache 为什么会这样?Apache在哪里落后了?nginx严格地“优于”Apache没有单一的原因。对于许多负载模式,您可以配置Apache,以便它处理此负载。对于某些(非常繁忙)的负载模式,默认配置中的nginx可能会表现出性能下降,并且需要进行微调才能正常工作 然而,许多人的经验表明,nginx在开箱即用或通过简单

这个问题不是nginx对apache。我对NGinx相对于Apache的架构优势更感兴趣。正如我所能理解的-

  • nginx是一种异步、事件驱动的web服务器,其性能远远优于Apache

为什么会这样?Apache在哪里落后了?

nginx严格地“优于”Apache没有单一的原因。对于许多负载模式,您可以配置Apache,以便它处理此负载。对于某些(非常繁忙)的负载模式,默认配置中的nginx可能会表现出性能下降,并且需要进行微调才能正常工作

然而,许多人的经验表明,nginx在开箱即用或通过简单的调优实际上工作得“更好”。当nginx作为前端安装时,许多系统的性能明显提高,Apache移到了后端

主要原因是nginx是事件驱动的,并且包含处理连接生命周期的状态机。这样,您可以拥有很少的“工作”进程,每个进程同时处理数百个甚至数千个连接。对于Apache,您必须运行与连接数相同数量的子进程(或线程)

很明显,三个进程对一千个进程应该是一个巨大的胜利,至少是这样

特别是,nginx可以轻松地大大减少服务静态文件(图像、Javascript、CSS)的负载。在nginx中处理每一个额外的连接都非常便宜,因此静态文件在请求数量上通常占大多数,因此可以得到高效的处理

此外,nginx的性能对于“慢客户机”更好。当您让Apache直接查看Internet,并且客户端通过(拥挤的)线路发送请求时,您的(快速)服务器将不得不耐心地向(慢速)客户端发送请求,直到它消耗整个响应。因此,Apache子线程(或线程)不能做任何有用的事情。另一方面,Nginx worker在处理其他连接的同时,只是在epoll描述符集中保持这个慢速连接


从概念的角度来看,您应该始终尝试将请求的“类”与其自己的性能概要和需求分开。例如,为小型静态文件提供服务就是这样一种类型;服务动态页面是另一个这样的类;为巨大的静态文件提供服务是另一回事。将nginx引入您的系统会隐式地处理这种分离。

Quote:对于Apache,您必须运行与连接数相同数量的子进程(或线程)。我相信如果你使用
mpm\u事件
,这不适用?不,它也适用于
mpm\u事件
(从阅读来看,
mpm\u事件
只是
工作者
)。Apache没有合适的FSM模块。@squadette从我对
mpm_事件
code的少量阅读来看,我不同意:对于
mpm_事件
,工作者仅用于在套接字准备就绪时执行I/O,并运行hander和筛选器,例如,在libevent(libevhtp)、Cherokee、,等等。在
mpm\u事件下
您可以用几个工作进程建立数千个连接。您确定Nginx是纯异步的吗?