Apache VS Nginx

本文参考于serverguy
来源:https://serverguy.com/comparison/apache-vs-nginx/

Apache与Nginx

Apache和Nginx都属于Web服务器,两者都实现了HTTP 1.1协议,且Apache和NGINX之间的主要区别在于它们的设计架构
Apache使用过程驱动的方法,并为每个请求创建一个新线程。
NGINX使用事件驱动的体系结构来处理一个线程内的多个请求。

以下以几个不同方面来阐明Apache与Nginx优点和局限性

一、基本架构

Apache

过程驱动方法
为每个请求创建一个新线程。

Apache遵循多线程方法。它提供了多种多样的处理模块。这些预模块基本上是三种类型的请求处理算法。每个都针对不同的服务器需求。换句话说,Apache每次都会创建一个新线程来处理每个连接请求。但是,Apache的基本体系结构会导致大量资源消耗,从而导致服务器出现问题(例如,速度较慢)
Apache VS Nginx_第1张图片

Nginx

事件驱动的方法
在一个线程中处理多个请求

Nginx采用事件驱动的架构,并异步处理请求它被设计为使用非阻塞事件驱动的连接处理算法。因此,其进程可以在一个处理线程中处理数千个连接(请求)。这样的连接处理模块使Nginx可以在有限的资源下快速且广泛地工作。
Apache VS Nginx_第2张图片

那下面通过一个咖啡店的类比来阐明事件驱动过程驱动

类比参考于LISA CLARKE
来源:https://blog.litespeedtech.com/2018/04/16/difference-between-event-driven-and-process-based/

在基于过程的咖啡店中,每个员工为一个客户服务,如果商店中有三个客户,则必须有三个员工为这些客户提供服务,而当商店里有十个顾客时,前三个下订单的客户可能很快就会得到服务,但其他七个呢?他们将等待很长时间。许多客户不会有这种耐心,会去其他地方喝咖啡。
基于进程的Apache Web服务器就是这种情况。为了处理大量请求,您需要更多的流程,这意味着您需要购买更多的硬件。

在事件驱动的咖啡店中,每个员工为多个客户提供服务。一名员工接受订单和付款,然后将订单执行任务委托给其他员工。登记处的员工会及时联系所有十个客户,因为他或她需要做的就是接订单,将指令转交给后端的咖啡师并进行付款。同时,后端咖啡师根据需要倒咖啡,制作拿铁咖啡和给羊角面包加温。

Nginx Web服务器 一家咖啡店
Server发出请求并将其转发到外部流程 商店员工接单并将其委托给咖啡师
Server不会等待动态响应,而是继续响应更多请求 员工不等待咖啡师完成工作,而是继续接受下一个订单
当外部流程响应准备就绪时,Web服务器将获得回调 当咖啡师完成订单时,会通知员工
Server将外部响应发送回请求的客户端 员工将完成的订单提供给客户

基于事件的Nginx服务器就是这种情况。较少的进程可以完成许多工作,因此您的服务器可以快速处理大量请求。并且不需要更多的硬件。

优胜者:
NGiNX –它具有轻量级的结构,并且比Apache的结构要快得多。

二、静态内容

静态内容或文件通常是存储在服务器计算机磁盘上的文件,例如CSS文件,JavaScripts文件或图像。

Apache

使用基于文件的方法提供静态内容

Apache使用其常规的基于文件的方法来处理静态内容。

Nginx

在提供静态内容时,Nginx是王者!

由于Nginx的设计架构能够更好地处理负载,因此在提供静态内容方面,它的速度要快得多Apache VS Nginx_第3张图片

优胜者:
静态的:就静态内容而言,Nginx超越了Apache。

三、动态内容

Apache

在服务器内部处理动态内容

Apache可以在Web服务器本身中处理动态内容,而不必依赖任何外部组件。

NGINX

服务器内不处理动态内容

Nginx无法像Apache一样在Web服务器中对其进行处理。具有动态网页内容的所有请求都将传递到外部流程(例如PHP-FPM)以执行。而当与SCGI处理程序和FastCGI模块一起使用时,NGINX可以提供动态内容

Nginx等待最终的内容返回并将其传递回客户端
请参考此图以获得清晰的主意:
Apache VS Nginx_第4张图片

优胜者:
动态的:两者都擅长处理动态内容,但感觉apache更好。

四、操作系统支持

Apache

支持所有类似Unix的系统,包括Linux和BSD。
完全支持MS-Windows

Nginx

支持几乎所有类似Unix的操作系统
部分支持Windows。

优胜者:
两者在这里几乎相似

五、分布式/集中式配置

Apache

允许通过.htaccess文件在每个目录的基础上进行其他配置。

这种体系结构允许非特权用户控制其网站的某些方面,而无需授予他们编辑主配置的权限。不过随之而来的是性能变低

Nginx

不允许其他配置

它不提供其他配置。但是,它可以提高性能,因此对您有利。
通过不允许目录配置,它可以比Apache更快地处理请求。它不需要搜索.htaccess文件并解释用户的要求。

优胜者:
Apache(如果考虑配置);
NGiNX(如果考虑速度)。

六、requests解析

Apache

通过文件系统位置

提供解析requests的能力。作为文件系统位置上的物理资源,可能需要更抽象的评估。它将请求作为文件系统位置传递。

当然,Apache确实使用URI位置,但是它们通常用于更多抽象资源。在创建或配置虚拟主机时,Apache使用文档根目录下的目录块。

在使用.htaccess文件覆盖特定的目录配置时,也可以看到文件系统位置的首选项。

Nginx

传递URI来解释请求

Nginx被创建为既是Web服务器又是反向代理服务器。

它没有提供用于指定配置的机制。对于文件系统目录,而是传递其URI本身。通过将请求作为URI而不是文件系统位置进行传递,Nginx可以在Web服务器和代理服务器中轻松运行。它通过布局如何响应差异请求模式来进行简单配置。
在准备好处理请求之前,它不会检查文件系统。它解释了为什么它不实现任何形式的.htaccess文件。

这种将请求解释为URI位置的设计使Nginx不仅可以轻松地充当Web服务器,而且还可以轻松地充当代理服务器,负载平衡器和HTTP缓存。

优胜者:
Nginx似乎因为其更快的解释和响应而赢得了胜利。

七、功能模块

Apache

60个可以打开/关闭的官方动态可加载模块

Apache服务器具有一组丰富的功能,可以通过安装60个正式模块之一来启用。在互联网上也可以轻松找到许多其他非官方模块。

它的模块系统允许您动态加载或卸载模块以满足您的需求。可以打开或关闭其模块,以添加或删除功能并挂接到主服务器。

简而言之,Apache有几个功能模块可以满足您的需求,但是其中许多功能模块并不经常使用。

Nginx

第三方核心模块(不可动态加载)

另一方面,选择了Nginx并将其编译到第三方插件的过程中。无法动态加载。尽管这些模块很有用,但它们仅允许您包含要使用的功能,就可以指示您希望从服务器中获得什么。

它被认为比Apache服务器安全得多,因为可以将任意组件挂接到服务器中。

此外,NGINX提供了Web服务器的所有核心功能,而不会牺牲使之成功的轻量级和高性能的质量。

注意: Apache就像Microsoft Word,而Nginx就像记事本。怎么样?Apache有上百万种选择,但您只需要少数选择。NGINX做这些“一些”事情,并且比Apache快50倍。

优胜者:
NGiNX –重要性不高的功能和模块使它比Apache更轻巧,更智能,更好。

八、灵活性

Apache

支持通过动态模块自定义Web服务器

可以通过使用模块对Web服务器进行自定义。Apache加载动态模块的时间最长,因此所有Apache模块都支持此功能。

Nginx

不够灵活,无法支持动态模块和加载。

但是,NGINX并非如此。2016年初,NGINX获得了对动态模块加载的支持;以前,NGINX需要管理员将模块编译为NGINX二进制文件。

大多数模块尚不支持动态加载,但是随着时间的推移它们可能会支持动态加载。

优胜者:
Apache –在这一点上显然很重要。

九、安全

Apache

很好的安全性。

Apache确保在其服务器上运行的所有网站均不受任何危害和黑客侵害。

因此,它提供了用于DDoS攻击处理的配置技巧,以及用于响应HTTP DoS,DDoS或暴力攻击的mod_evasive模块。

Nginx

较小的代码库可提供更好的安全性。

但是,NGINX代码库要小很多个数量级,因此从具有前瞻性的安全性角度来看,这绝对是一大优势。NGINX还提供了最近的安全公告列表。

优胜者:
Nginx –被认为更安全

十、支持

Apache

社区支持通过邮件列表,IRC和Stack Overflow

许多第三方公司(例如OpenLogic)都可以提供商业Apache支持,但Apache Foundation并未维护任何正式列表。Apache服务器旨在为其所有用户提供强大的支持。

Nginx

通过邮件列表,IRC,Stack Overflow和论坛提供社区支持。

NGINX背后的公司提供了一种名为NGINX Plus的商业产品,该产品支持有关负载平衡,媒体流和监视的一系列附加功能。

优胜者:
这是一个平局!两者的支持几乎相同。两个Web服务器都很棒。

十一、同时使用两者-一起使用!

可以通过结合使用每个服务器的优势。

您可以将Apache前面的Nginx用作服务器代理(如下图所示)。这利用了Nginx的快速处理速度和同时建立大量连接的能力。
Apache VS Nginx_第5张图片
对于静态连接Nginx将文件快速提供给客户端。对于动态内容(例如Php文件),Nginx反向代理服务器会将其请求代理到Apache,然后Apache可以处理其结果并返回其呈现的页面。

然后,Nginx可以将最终内容传递给客户端。此外,它还使您拥有功能强大的Web服务器,可以非常快速地为客户(大量用户)提供服务

本文只用于个人学习与记录

你可能感兴趣的:(杂,nginx,apache)