Nginx VS Apache –哪个是最好的Web服务器?

NGINX与Apache –哪个Web服务器更好?

曾经,Apache在Web服务器的所有业务中占据最大份额,运行在全球一半以上的服务器盒上。但是,这种优势现在已经侵蚀了近三分之一,并且还在不断下降。

同时,Microsoft的IIS Web服务器一直在普及。保持在这两个Wdb服务器的中间,NGINX占据了所有网站的16%(听起来像“ engine-x”)。每年以大约1%的总业务速度缓慢地落后于其两个竞争对手。因此,他们可能很快就会对Web新贵感到震惊。

为什么要比较NGINX和Apache?

随着IIS逼近,我们认为有必要提出以下问题:NGINX与Apache?谁才是霸主,因为它们都和Web服务器一样接近流行度图表的顶峰。我们希望评估它们在5个关键领域

  1. 静态内容与动态内容的性能
  2. 操作系统支持
  3. 安全性
  4. 灵活性
  5. 文档和支持。

Apache的.htaccess文件为需要共享主机的人提供了优势,而NGINX在动态内容和更精致的功能方面占据上风。这也就是VPS和专用主机用户赞扬它的原因。我们将逐个功能地进行比较,并建议哪个可能更适合处理Web应用程序项目。

NGINX和Apache的当前数量

值得指出的是,一些网络分析人员认为Apache与NGINX的问题很重要,因为他们的业务实际上比上面显示的数字还要多。他们实际上认为IIS远不及竞争对手。

市场份额可以用不同的方法来计算,因此这些数字只是一个粗略的指导,但总体趋势是明确的。如果仅考虑流量最高的站点,则Apache占总销售额的比例已经下降到46%,而NGINX则以24%的市场份额和3%的同比增长率排名第二。因此,现在NGINX与Apache的比较似乎更加必要。

NGINX概述

NGINX的诞生是经过严苛的测试,其中服务器必须同时达到10,000个客户端连接。它使用非同步的,事件驱动的体系结构来应对这种巨大的负载。它的设计意味着它可以承受高负载以及负载变化很大的负载,并利用RAM使用率,CPU使用率和预测延迟来实现更高的效率。

NGINX处理事件模型与Apache有所不同,因为它没有为每个连接设置额外的工作进程。通常,最好将NGINX配置为为每个CPU运行一个工作进程,以便可以最大程度地提高硬件效率。

它还提供了众多功能,使其非常适合各种应用场景。例如用于HTTP,HTTPS,SMTP,POP3和IMAP协议的反向代理服务器,负载平衡器和HTTP缓存。另外,它是Apache和其他Web服务器的前端代理,可以将Apache的灵活性与NGINX出色的静态内容处理能力结合在一起。

NGINX提供对FastCGI和SCGI处理程序的支持,以服务于动态内容脚本,例如PHP和Python。它使用LEMP堆栈:LAMP的一种变体,使用NGINX的语音拼写(Linux,“ En-juhn-ex”,MySQL,PHP)。

Apache概述

目前,LAMP(Linux,Apache,MySQL,PHP)是一种流行的Web堆栈,Apache是​​其Web服务器组件。尽管还有其他各种Web堆栈组件(例如NodeJS,富客户端JS框架,各种云服务等),但LAMP仍然是许多人的最爱。

您可以添加60个正式模块和各种非官方模块,为Apache Web服务器提供多种功能。Apache已经提出了几种不同的方法来处理Web请求。近年来,不断增长的页面大小和潜在的并发Web请求足以淹没未就绪服务器的资源。

所有这些额外的工作激发了人们对如何最好地应对的反思。Apache请求处理方法可以设置三种不同的方式。下面是多处理模块(MPM)的说明:

  • 流程:这是原始的“前叉”方法;它不能在大量并发连接上很好地扩展,因为它使用大量RAM,甚至在负载很高时可能拒绝连接。较小的域不会遇到这种情况,但是较大的域可能会遇到这种情况。
  • 事件:这类似于工作模型,但是它创建了一个侦听器线程,该线程侦听连接并将其传递给工作线程进行处理。该MPM在单个线程上更有效地照顾了长时间运行的连接(KeepAlive处理)。从Apache 2.4开始,事件模型已经声明为稳定的,并且如果操作系统可以支持的话,现在也是默认设置。您还可以尝试编译时和运行时的选项来提高Apache性能。
  • Worker模型:建立一个控制流程,然后创建其他子流程。然后,每一个都产生一定数量的线程以及侦听器线程。侦听器线程侦听连接并将连接到达时将其传递给线程进行处理。该模型确实比前叉方法更有效地扩展规模,但是由于单个控制过程会造成瓶颈,因此它仍然会遇到高流量站点的扩展问题。

Apache vs NGINX –详细比较

总体而言,通过比较两个Web服务器在多个工作领域的运行情况,可以看出NGINX与Apache的争夺战是激烈的。但是根据您的需求,一个可能做得比另一个更好。如果这听起来有些不确定,请不要担心,我们将在最后进行总结。

性能

让我们在静态和动态内容服务场景中对它们进行比较。

静态内容

根据运行多达1,000个并发连接的基准测试,NGINX的性能是Apache的2.5倍。另一个运行512个并发连接的基准测试表明,NGINX的速度大约是后者的两倍,并且消耗的内存略少(4%)。毫无疑问,NGINX具有静态内容优于Apache的优势。因此,如果您需要提供大量并发静态内容,则NGINX将在N这一部分中获胜。

动态内容

2015年的一项基准测试比较了Apache和NGINX提供的动态内容,该结果表明,将Apache事件MPM与PHP-FPM模块链接时,可以管理与NGINX和PHP相同的并发性。另一个Web服务器性能比较显示了相似的结果。结果是,几乎所有请求处理时间都花在了PHP运行时环境中,而不是Web服务器的核心部分上。两个Web服务器之间的PHP运行时环境非常相似。

当同时使用Apache和NGINX来提供动态内容时,Speedemy的Web服务器基准测试发现了类似的情况。就PHP(可能还有其他多种语言)而言,动态页面服务器的性能与正确的Apache模块设置(PHP-FPM FastCGI)几乎相同。如果需要提高动态页面的速度,则有几种选择:添加Varnish或Memcached缓存层,切换到更快的PHP运行时(例如HHVM),进行负载平衡或投资额外的硬件。

不幸的是,更好地服务静态页面并不能神奇地转化为NGINX对于动态页面更优越的支持。实际上,这两个Web服务器在这方面都提供或多或少的相似性能。

操作系统支持

Apache可与各种类似Unix的系统(例如Linux或BSD)一起使用,并完全支持Microsoft Windows。NGINX也可以在其中一些上运行,并且对Windows有所支持,尽管性能并不那么强。Apache在这一方面具有优势。

安全

两个服务器在基于C的代码库中都取得了出色的安全性记录,但是NGINX代码库显然没有那么大。从安全的角度来看,这是相当可观的。另外,漏洞报告可用于Apache 2.2和2.4。

NGINX还保留了最新的安全公告列表。Apache提供了用于处理DDoS攻击的配置技巧,包括用于处理HTTP DoS,DDoS或暴力攻击的mod evasive模块。此外,它还在NGINX博客上提供了用于应对DDoS威胁的资源。

灵活性

可以通过编写模块来自定义Web服务器。Apache提供动态模块加载已有很长时间了,因此所有Apache模块都支持此功能。但是,对于NGINX来说却是另一回事。

NGINX仅在2016年初获得了对动态模块加载的支持。在此之前,管理员必须将模块编译为NGINX二进制文件。大多数模块尚不支持动态加载,但这会及时更改。Apache显然在这里领先。

Apache和NGINX –模块

Apache和NGINX都提供了许多提供特定功能的模块。

Apache模块:

  • 官方模块(在Apache文档的“模块”部分中可以找到它们)
  • 维基百科模块列表

目前,似乎没有所有第三方模块的最新列表。NGINX与Apache的呼声很高,因为两者均提供功能完善且不断扩展的功能集,但每个Web服务器在其他服务器无法比拟的方面都表现出色。

NGINX模块:

  • 官方模块(在NGINX文档的“模块参考”部分中可以找到它们)
  • 第三方模块

很难断定Apache还是NGINX在这方面是否更出色,但是两台Web服务器都具有大多数必需的核心模块功能(例如代理,缓存,负载平衡等)。NGINX似乎更适合充当TCP和电子邮件(SMTP,IMAP,POP3)连接的反向代理。至于媒体流模块,商业化的NGINX Plus版本似乎处于领先地位。

Apache.htaccess

NGINX不支持Apache的.htaccess文件。.htaccess文件允许用户绕过任何给定目录的系统设置;但是为了获得最佳操作,.htaccess指令应包含在主配置文件中。对于共享主机,这是不可能的,但是对于共享主机的用户,它提供了更大的灵活性。

文献资料

Apache vs NGINX问题与文档产品紧密相关,因为两者都很出色,包括NGINX Wiki。NGINX提供涵盖许多NGINX主题的就地和在线培训课程,甚至提供考试认证。

Apache vs NGINX的技术支持

Apache通过邮件列表,IRC和 Stack Overflow 提供用户支持。付费的Apache支持来自诸如OpenLogic之类的第三方公司,但是没有正式的列表可供选择。NGINX社区支持预Apache类似,并且还有一个论坛。NGINX公司出售一种名为NGINX Plus的商业产品,该产品支持一系列附加功能,包括负载平衡,媒体流和监视。

那么到底选择哪一个:Apache vs NGINX?

在大多数情况下,这对竞争者的当前版本各有优势。NGINX对于静态内容更好,但对动态内容几乎没有额外的性能。同时,NGINX因其一些更高级的功能(媒体流,非HTTP协议的反向代理)以及其商业支持和培训而脱颖而出。

共享的托管用户可能会发现Apache的.htaccess文件更方便,并且Apache可以处理许多动态模块。NGINX最近才添加这些模块。NGINX在VPS托管,专用托管或群集容器中很受欢迎。

吸引大量访问者并且将提供大量静态内容和/或流媒体的网站所有者可以选择NGINX。但是,在大多数情况下,任何一台Web服务器都能做得完全令人满意。无论选择哪种Web服务器,都需要可靠的Linux托管提供商来为共享或虚拟服务器提供技术支持。

《Nginx VS Apache –哪个是最好的Web服务器?》有1条留言

留下评论