nginx 和 apache 网络服务器 [关闭]
Posted
技术标签:
【中文标题】nginx 和 apache 网络服务器 [关闭]【英文标题】:nginx and apache web servers [closed] 【发布时间】:2011-04-07 16:32:32 【问题描述】:这个问题不是 nginx vs apache。我对 NGinx 相对于 Apache 的架构优势更感兴趣。据我所知-
nginx 是一个异步的、事件驱动的网络服务器,它的性能大大优于 Apache。这是为什么? Apache 落后在哪里?
【问题讨论】:
你确定 Nginx 是纯异步的? 【参考方案1】:nginx 严格地“优于”Apache 并没有单一的原因。对于许多负载模式,您可以配置 Apache 以便它处理此负载。对于某些(非常繁忙的)负载模式,默认配置中的 nginx 可能会出现性能下降,并且可能需要微调才能正常工作。
然而,许多人的经验是,nginx 实际上开箱即用,或者通过简单的调整“更好”。将 nginx 安装为前端并将 Apache 移至后端后,许多系统的性能明显提高。
主要原因是 nginx 是事件驱动的,并且包含处理连接生命周期的状态机。这样,您可以拥有非常少的“工作”进程,每个进程同时处理数百甚至数千个连接。对于 Apache,您必须运行与连接数相同数量的子进程(或线程)。
很明显,三个进程对一千个进程应该是一个巨大的胜利,至少。
特别是,nginx 可以轻松地大大减少提供静态文件(图像、javascript、CSS)的负载。在 nginx 中处理每个额外的连接非常便宜,因此静态文件通常占请求数量的大多数,因此您可以获得高效的处理。
此外,对于“慢速客户端”,nginx 的性能更好。当您让 Apache 直接访问 Internet,并且客户端通过(拥塞)线路发送请求时,您的(快速)服务器将不得不耐心地为(慢速)客户端提供数据,等待它消耗整个响应。因此 Apache 子(或线程)不能做任何有用的事情。另一方面,Nginx worker 只是将这个慢速连接保存在 epoll 描述符集中,同时处理其他连接。
从概念的角度来看,您应该始终尝试将请求的“类”与它们自己的性能概况和需求分开。例如,提供小型静态文件就是这样的类之一;提供动态页面是另一个这样的类;提供巨大的静态文件是另一回事。将 nginx 引入您的系统会隐式处理这种分离。
【讨论】:
引用:对于 Apache,您必须运行与连接数相同数量的子进程(或线程)。 我相信如果您使用mpm_event
?
不,它也适用于mpm_event
(从阅读httpd.apache.org/docs/2.4/mod/event.html 来看,mpm_event
只是worker
有一个扭曲)。 Apache 没有正确的 FSM 模块。
@squadette 从我对mpm_event
代码的少量阅读中我不同意:mpm_event
工作人员仅在套接字准备好时用于执行 I/O 并运行处理程序和过滤器,例如与在 libevent (libevhtp)、Cherokee 等中使用 worker 的方式相同。在 mpm_event
下,您可以与少数几个 worker 建立数千个连接。以上是关于nginx 和 apache 网络服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章