这个问题不是Nginx vs apache.我对Nginx对Apache的架构优势更感兴趣.当我能够理解 –
> Nginx是一个异步的,事件驱动的网络服务器,它以超大的优势胜过Apache.
为什么是这样? Apache落后于哪里?
最佳答案
没有一个原因,Nginx严格“胜过”Apache.对于许多加载模式,您可以配置Apache,以便处理此负载.对于一些(非常繁忙的)加载模式,默认配置中的Nginx可能会显示性能下降,并且可能需要微调才能正常工作.
然而,这是许多的经验,Nginx实际上是“开箱即用”,或者简单的调整.当Nginx作为前端安装时,许多系统的性能显着提高,Apache移动到后端.
主要原因是Nginx是事件驱动的,并且包含处理连接生命周期的状态机.这样,您可以拥有非常少的“工作者”进程,每个进程同时处理数百甚至数千个连接.对于Apache,您将必须运行与连接数相同数量的子进程(或线程).
显然,反对一千个进程的三个进程至少应该是一个巨大的胜利.
特别是,Nginx很容易允许大大减少服务静态文件(图像,Javascript,CSS)的负载.处理Nginx中的每个附加连接是非常便宜的,因为根据请求数量,静态文件通常是多数,您可以获得高效的处理.
此外,Nginx的性能对于“慢客户端”来说更好.当您有Apache直视互联网,并且客户端发送请求(拥塞)线路时,您的(快速)服务器将不得不耐心地馈送(慢)客户端,等待它消耗整个响应.因此,Apache小孩(或线程)无法做任何有用的事情.另一方面,Nginx工作者只需将这个缓慢的连接保存在epoll集合的描述符中,同时处理其他连接.
从概念的角度来看,您应该始终尝试将请求的“类”与自己的性能配置文件和要求分开.例如,提供小型静态文件是其中之一;服务动态页面是另一个类;服务巨大的静态文件是另一个.向你的系统介绍Nginx隐含地处理这种分离.