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 网络服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Apache 或 Nginx 服务于 Django 应用程序? [关闭]

Nginx和Apache 转发网络问题

Nginx 不会离开!如何删除它[关闭]

Nginx网络服务

nginx80端口被占用,启动失败。

网络发布工具 Apache/Nginx