nginx与apache有何不同
我们将讨论两个Web服务器程序包,一个是apache,它已经显示出了在模块的帮助下在一个程序包中可以执行多种操作的能力,并且apache平台为互联网上的数百万个提供了支持。另一个是由俄罗斯程序员Igor Sysoev制造的相对较新的Web服务器软件包Nginx。
行业中的许多人可能已经意识到nginx闻名的“速度”。
apache和nginx的工作模型之间还有其他重要区别,我们将在后面详细讨论。
让我们讨论apache Web服务器使用的两个工作模型。
稍后我们将介绍nginx。
与apache相关的大多数人可能都知道这两种模型,apache通过这两种模型来处理其请求。
这些模型在下面提到。
1,Apache MPM Prefork
2.Apache MPM工作器。
注意:对于不同的平台和功能,有许多不同的MPM模块可用,但是我们在这里仅讨论以上两个。
让我们看一下MPM Prefork和MPM Worker之间的主要区别。
MPM代表多处理模块。
MPM Prefork:
apache中的大多数功能都来自模块,即使此MPM Prefork也是模块提供的,也可以启用或者禁用。
这个Apache的prefork模型是非线程的,是一个很好的模型,因为它使每个连接都相互隔离。
因此,如果一个连接出现问题,则另一连接不会全部受到影响。
默认情况下,如果未指定MPM模块,则apache将此MPM Prefork用作其MPM模块。
但是此模型非常耗费资源。
为什么Prefork模型需要大量资源?
因为在此模型中,有一个父进程坐下来并创建了许多子进程,这些子进程等待请求并充当请求的到达。
这意味着每个请求均由单独的流程处理。
换句话说,我们可以说它是“每个请求的过程”。
并且apache维护,请求到达之前有几个空闲过程。
由于这些等待请求的空闲进程,因此它们可以在请求到达时快速提供服务。
但是,每个进程都会利用内存和CPU等系统资源。
每个过程都使用相等数量的内存。
在此模型中,还存在一个单一的父进程,它产生了一些子进程。
但是没有“每个请求的进程”,而是“每个请求的线程”。
因此,子进程内部将具有一定数量的线程。
每个子进程将具有某些“服务器线程”和某些“空闲线程”。
空闲线程正在等待新请求,因此在请求到达时创建线程不会浪费时间。
apache配置文件/etc/httpd/conf/httpd.conf中有一个名为“ StartServers”的指令,该指令说明apache启动时将有多少个子进程。
子进程借助内部固定数目的线程来处理请求,该数目由配置文件中的参数“ ThreadsPerChild”指定。
注意:使用apache MPM worker模型时,报告了一些php模块问题。
现在让我们讨论一下nginx。
Nginx:
Nginx的诞生是为了解决apache中的c10k问题。
C10k:它的名称是优化Web服务器软件以一次处理大量请求的问题。
一次在10000个请求的范围内,因此名称
Nginx以提供静态页面的速度而闻名,它比apache快得多并且保持机器资源非常低。
从根本上说,apache和nginx差别很大。
Apache在多进程/多线程体系结构中工作,而nginx是事件驱动的单线程体系结构。
这种均匀驱动的体系结构的主要区别在于,非常少的nginx worker进程可以处理非常多的请求。
有时,nginx也被部署为前端服务器,以更快的速度向客户端提供静态内容请求,并在后面进行部署。
每个工作进程在事件驱动模型的帮助下处理请求。
Nginx借助linux内核中称为epoll的特殊功能并选择poll来做到这一点。
Apache即使使用其线程模型运行,也比nginx占用更多的系统资源。
为什么Nginx比Apache更有效地运行?
在apache中,当服务请求时,将创建为该请求服务的线程或者进程。
现在,如果一个请求需要数据库中的一些数据以及磁盘中的文件等,则该过程将等待。
因此,Apache中的某些进程只是坐下来等待某些任务完成(吃掉系统资源)。
假设客户端的互联网连接速度较慢,该客户端连接到运行apache的Web服务器,则apache服务器从磁盘上检索数据以为该客户端提供服务。
现在,即使在为客户提供服务之后,该流程也将一直等到从该客户端接收到确认(这将浪费大量的流程资源)
Nginx避免了子进程的想法。
所有请求均由单个线程处理。
这个单线程将在称为事件循环的事件的帮助下处理所有事情。
因此,只要需要新的连接或者需要执行某些操作(不浪费资源),线程就会弹出。
第1步:获取请求
步骤2:请求触发流程内的事件
步骤3:流程管理所有这些事件并返回输出(并同时处理其他请求的其他事件)
Nginx还支持apache支持的主要功能,如下所示。
- SSL/TLS
- 虚拟主机
- 反向代理
- 负载平衡
- 压缩
- 网址重写