Nginx 与 Apache:哪个是最好的 Web 服务器?

已发表: 2021-12-30

虽然有许多不同类型的服务器软件,但您通常会将竞争者缩减为 Nginx 与 Apache。 这是因为两者都为许多不同的服务器配置提供了最佳性能,并且比另一个更适合某些应用程序。

即便如此,您仍然需要考虑其中哪一个更适合您的需求。 有几个不同的类别需要研究,例如操作系统 (OS) 支持、安全性、文档和(当然)性能。

在这篇文章中,我们将在多个不同领域比较 Nginx 和 Apache。 最后,我们将总结我们的发现并为您提供选择正确选项所需的信息。

介绍 Nginx 和 Apache

在深入了解每种服务器类型之前,让我们先简要介绍一下 Nginx 和 Apache。 一旦我们进入下一部分,您将了解两者的一些用例,以及您可能会在哪里看到它们“在野外”。

#Nginx 与 #Apache:哪一个是适合您的 Web 服务器?
点击推文

Nginx

Nginx 标志。

与 Apache 相比,Nginx(发音为“engine X” )是服务器端技术领域的一个相对新手。 然而,开发团队承担了扩展 Apache 系统限制的任务。

这是一个开源解决方案,许多用户考虑其稳定性和可扩展性。 这(部分)归结为它的事件驱动架构——稍后会更多。 事实上,最初 Nginx 版本的部分目标是能够同时处理 10,000 个连接。 这在 2004 年是必要的,因为当时网络迅速扩张。

总体而言,系统管理员和站点所有者喜欢 Nginx,因为它性能好,可以很好地处理静态文件,并且可以执行负载均衡器和“反向代理”的功能。 这些都与正常运行时间、速度和安全性有关。

阿帕奇

Apache HTTPS 服务器徽标。

Apache 在某种程度上是 Web 服务器技术的“老人”。 它几乎与 Web 本身一样古老——从 1995 年起,Apache 一直是数千台(如果不是数百万台)服务器的核心软件。

长期以来,Apache 一直是“系统管理员”中的主导技术。 造成这种情况的原因有很多——一些与性能有关,而另一些则与习惯有关。 无论如何,Apache 服务器在配置很重要的地方有很多用途。

您会发现 Apache 是所有 Linux 发行版上的预安装软件,因此它是该操作系统的首选解决方案。 然而,虽然它使用与 Nginx 不同的架构,但它仍然提供强大的功能、可扩展性和出色的文档。

许多系统管理员也喜欢 Apache 的可定制特性,以及如何通过加载各种模块来创建自己的服务器。

Nginx 与 Apache 的一般用例

公平地说,Apache 在服务网站方面是“万事通”。 然而,这是喜忧参半。 是的,Apache 服务器几乎可以做 Nginx 可以做的所有事情,但代价是性能较低的代码。 年龄是这里的一个因素。

因为 Apache 出现的时候,我们还没有一些更高级的 Web 服务器应用程序,所以代码库无法满足现代网站的需求。 虽然这些问题现在不一定值得关注,但 Nginx 等解决方案适用于现代网络。

因此,您会发现 Apache 非常适合作为共享主机等应用程序的易于配置的服务器。 它的集成还将它用作本地开发服务器软件,作为 Linux、Apache、MySQL 和 PHP (LAMP) 堆栈的一部分。

LAMP 堆栈所有部分的徽标:Linux、Apache、MySQL 和 PHP。

相比之下,Nginx 拥有更成熟的软件基础,​​与 Apache 相比,精简程度更高。 如果稳定性和安全性是关键的基本要素,那就太好了。 你会发现 Nginx 服务器不像其他类型那样可配置,这意味着你将更少地访问它的核心。

更重要的是,它不像 Apache 那样模块化,这使得它不太适合需要进行服务器定制的情况。

Nginx vs Apache:每种服务器类型的流行程度

很长一段时间,服务器软件类似于单马赛跑。 Apache 多年来一直是主导力量,并且仍然拥有巨大的市场份额。 因此,您会发现有很多对 Apache 服务器的集成和支持,以及一流的文档。

这是选择 Apache 的进一步理由,并有助于其继续使用。 然而,Nginx 是一个拥有巨大市场份额的服务器软件。 随着时间的推移,Nginx 的使用量缓慢上升,以至于它现在是市场上最占主导地位的 Web 服务器技术,尽管幅度不大。

展望未来,我们建议 Apache 的使用会随着时间的推移而减少,因为 Nginx 提供了系统管理员在 Web 服务器中所需的大量功能。 然而,LiteSpeed Web Server 和 Cloudflare Server 即将问世,并伴随着不断增长的用户群和强大的支持。 几年后,这种比较可以将 Nginx 与这些年轻的新贵之一进行比较。

Nginx vs Apache:特性和功能的技术分解

接下来的几节将介绍 Nginx 与 Apache 的许多技术方面。 虽然我们不能涵盖所有内容,但我们会给主要领域足够的时间。 无论如何,因为这些代表了这两种服务器类型的核心元素,所以在为您选择合适的软件时,您将有足够的余地。

1.连接和请求处理

了解服务器如何处理连接至关重要,因为这是它的“核心货币”。 这是有争议的,但是当人们讨论 Nginx 与 Apache 的相对优点时,连接处理在感知中起着重要作用。

Nginx

Nginx 是“异步”和“事件驱动”的,这意味着它可以一次处理多个请求并在有可用资源时处理它们。 它产生“工作进程”来处理传入连接,它预计一次有数千个连接。 这些是服务器其余部分的“水载体”。

例如,每个工作进程都会监听进程事件和连接,并将它们添加到一个连续循环中。 从那里,服务器可以处理每个事件并在完成时将其删除。 Nginx 服务器的流程提供了固有的可扩展性,异步、非阻塞架构也提供了这种服务。

阿帕奇

相比之下,Apache 通过多个多处理模块 (MPM) 一次处理一个事件。 系统管理员将选择最适合任务的连接架构,其中有几种。

mpm_prefork模块是一个常见的模块。 这会为每个事件生成子进程,并且一次只处理一个连接。 如果进程数高于请求数,您将很难区分 Nginx 与 Apache 在性能方面的区别。

但是,这种情况很少见,并且 Apache 服务器在很多情况下会看到比进程更多的请求。 更重要的是,由于内存使用,这个 MPM 不能很好地扩展。

对于那些使用 PHP 的人来说, mpm_prefork是使用mod_php解释器模块的唯一安全方法。 尽管有缺点,这将是 WordPress 开发人员在必须部署到 Apache 服务器时选择的 MPM。

您还将看到mpm_workermpm_event模块。 由于它们可以为每个线程集合生成多个进程,因此它们执行类似的操作并更好地扩展。

这批 MPM 展示了 Apache 的灵活性,尽管在某些情况下存在性能缺陷。

静态与动态内容的请求处理

在我们继续之前,我们应该提到每个服务器软件的静态与动态内容。 你会读到 Nginx 不能处理动态内容,这可能会让你担心。 事实上,Nginx 不会以原生方式处理这类内容。 相反,它会将其发送到外部处理器(例如缓存),然后等待它返回,然后再继续移动内容。

对于开发,系统管理员将为此设置一个解决方案,例如 Memcached。 这种方法有负面影响,即在性能方面。 但是,链的每个部分的性能开销的好处否定了这一点。 Nginx 不必担心处理这些请求,因此它可以更高效地专注于其职责范围。

Apache 的 MPM 系统使其无需其他模块即可处理静态和动态内容。 对于动态内容,Apache 将语言处理器嵌入到每个 worker 中。 这是一种效果很好的简单方法。 如果需要进行更改,您也可以更换模块。

2.配置服务器

Nginx 与 Apache 之间更明显的区别之一是您如何配置每个服务器。 Nginx 使用集中式方法,这意味着用户无法在一个主文件之外配置服务器。 虽然这似乎是负面的,但有很多优点:

  • 服务器管理员负责全局安全,这加强了对整个服务器的访问。
  • 集中式服务器比其他类型的服务器具有更高的性能。 这是因为 Nginx 不需要处理请求来检查每个目录中的配置文件。
  • 这里有一个连锁效应,因为不会有来自多个区域的服务器覆盖,进一步降低了请求时间。

外行知道他们使用 Apache 服务器的一种方式是.htaccess文件的存在。 这些是您几乎可以在服务器上的任何位置添加的配置文件。 发出请求时,Apache 将检查.htaccess文件的路径的每个元素。

显示一些重写规则的 .htaccess 文件 - Nginx 与 Apache 比较

这对于想要个性化他们的服务器部分但如果其中一个指令导致性能或安全问题可能会造成灾难的用户来说非常棒。 这种分散的方法是您将看到 Apache 用于共享主机的原因之一。 这也是 WordPress 等内容管理系统 (CMS) 在 Apache 服务器上提供良好性能的原因。

3.请求解释

Nginx 与 Apache 的一个主要区别似乎并不明显,它是如何解释请求的。 简而言之:

  • Nginx 使用每个组件的统一资源标识符 (URI) 来解释和映射请求。
  • Apache 也可以使用 URI 来解释请求,但更常见的是看到基于文件的路径结构。

因为 Apache 首先是一个 Web 服务器,所以它将使用<Directory><Files><Location>块来定义资源。 这里的关键概念是 Apache “看到”的所有内容都与 Web 服务器相关,因此资源路径中没有歧义。 想想一个文档树,这就是 Apache 如何“可视化”服务器文件系统。

Apache 配置文件,显示特定目录的文件系统保护 - Nginx 与 Apache 比较

相比之下,Nginx 有很多用例,例如负载均衡器、代理服务器和 Web 服务器。 因此,请求需要作为 Nginx 的 URI 来处理它们。 例如,Nginx 使用serverlocation块:前者解释请求的主机,后者匹配 URI 部分。 整个请求变成了一个 URI。

Nginx 配置文件 - Nginx 与 Apache 比较

总的来说,URI 对 Nginx 来说更灵活,因为它可以适应它执行的任何功能。 即便如此,Apache 的系统仍然可以工作,因为它只需要履行作为 Web 服务器的角色。

Nginx vs Apache:2022 年你应该为你的服务器选择哪一个

包罗万象的答案,我应该选择哪种服务器软件? 很简单:它是您的托管服务提供商提供的任何一个。 在很多情况下,您将别无选择。 我们注意到,如果您想在 Nginx 和 Apache 之间做出决定,许多 Web 主机都遵循您应该匹配的相同模式:

  • 如果您想运行需要持续配置的服务器,或者您想为用户提供配置选择,Apache 将满足您的需求。
  • 但是,如果您想提供超级性能、坚如磐石的安全性,并且想要处理配置而不是您的用户,那么 Nginx 是前进的方向。

在性能方面,由于其固有的架构,Apache可以占用更多的内存。 Nginx 在高流量情况下会更好,尤其是在它必须处理大量静态内容的情况下。

因此,如果您依靠缓存来存储和提供内容,Nginx 可能是最佳选择。 但是,请记住,Nginx 不能提供动态内容,因此您会受到更多的性能影响,具体取决于您的服务器使用的代理的效率。

转到顶部

结论

WordPress 的许多领域(以及运行网站)提供了几乎压倒性的选择。 这是野兽的本性。 但是,当您需要使您的网站快速上线时,它无济于事。

#Nginx 与 #Apache:哪一个是适合您的 Web 服务器?
点击推文

您对服务器类型的选择是您需要格外小心的一项至关重要的一线决策。 Nginx 与 Apache 是一个常见的比较,因为两者在某些情况下都有好处。

我们的观点是,Nginx 可以以更高的性能覆盖最多的基础,这使其成为大多数 WordPress 用户的更好选择。 这就是为什么许多流行的注重性能的 WordPress 主机已经转向全 Nginx 服务器堆栈,包括 Kinsta 和 Flywheel。

无论如何,如果您没有选择,您可以安全地使用您的主机提供的任何内容,并且大多数 WordPress 网站都可以使用任何一个 Web 服务器。

您在 Nginx 与 Apache 之间的隔阂上处于什么位置? 在下面的评论部分让我们知道!

免费指南

加快速度的 5 个基本技巧
您的 WordPress 网站

将加载时间缩短 50-80%
只需遵循简单的提示。

下载免费指南