尽管有许多不同类型的服务器软件,但您通常会将竞争者归结为 Nginx 与 Apache。这是因为两者都为许多不同的服务器配置提供了最佳性能,并且比另一个更适合某些应用程序。
即便如此,您仍然需要考虑其中哪一个更适合您的需求。有几个不同的类别需要研究,例如操作系统 (OS) 支持、安全性、文档和(当然)性能。
在这篇文章中,我们将在许多不同的领域比较 Nginx 与 Apache。最后,我们将总结我们的发现,并为您提供选择正确选项所需的信息。
介绍 Nginx 和 Apache
在我们深入了解每种服务器类型的详细信息之前,让我们先简要介绍一下 Nginx 和 Apache。一旦我们进入下一部分,您将了解两者的一些用例,以及您可能在何处看到它们“在野外”。
#Nginx 与 #Apache:哪一个是适合您的 Web 服务器?👨💻
点击推文
nginx
与 Apache 相比,Nginx(发音为“engine X”)是服务器端技术领域的新手。然而,开发团队承担了扩展 Apache 系统局限性的任务。
这是一个开源解决方案,许多用户考虑其稳定性和可扩展性。这(部分)归结于它的事件驱动架构——稍后会详细介绍。事实上,最初的 Nginx 版本的部分目标是能够同时处理 10,000 个连接。由于当时的网络迅速扩展,这在 2004 年是必要的。
总体而言,系统管理员和站点所有者喜欢 Nginx,因为它具有高性能、适用于静态文件并执行负载均衡器和“反向代理”的功能。这些都与正常运行时间、速度和安全性相关。
阿帕奇
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) 堆栈的一部分。
相比之下,Nginx 拥有更成熟的软件基础,相比 Apache,其精简程度更高。在稳定性和安全性是关键、基本要素的地方很好。您会发现 Nginx 服务器不像其他类型那样可配置,这意味着您将更少地访问它的核心。
更重要的是,它不像 Apache 那样是模块化的,这使得它不太适合需要进行服务器定制的情况。
Nginx 与 Apache:每种服务器类型的流行程度
很长一段时间,服务器软件就像一场单马比赛。Apache 作为主导力量运行了多年,并且仍然占有巨大的市场份额。因此,您会发现有很多对 Apache 服务器的集成和支持,以及一流的文档。
这是选择 Apache 的进一步理由,并有助于其继续使用。然而,Nginx 是一个拥有巨大市场份额的服务器软件。随着时间的推移,Nginx 的使用率在缓慢上升,以至于它现在是市场上最主要的 Web 服务器技术,尽管不是很多。
展望未来,我们建议 Apache 的使用会随着时间的推移而减少,因为 Nginx 提供了很多系统管理员在 Web 服务器中需要的东西。然而,LiteSpeed Web Server和Cloudflare Server即将出现,并且拥有不断增长的用户群和强大的支持。几年后,这种比较可以将 Nginx 与这些年轻的新贵之一进行比较。
Nginx 与 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_worker 和 mpm_event 模块。由于它们可以为每个线程集合生成多个进程,因此它们执行类似的操作并更好地扩展。
这批 MPM 展示了 Apache 的灵活性,尽管在某些情况下性能存在缺陷。
静态和动态内容的请求处理
在我们继续之前,我们应该提到每个服务器软件的静态和动态内容。您将了解到 Nginx 无法处理动态内容,这可能会让您感到担忧。事实上,Nginx 不会以原生方式处理此类内容。相反,它会将其发送到外部处理器(例如缓存),然后在移动内容之前等待它返回。
对于开发,系统管理员将为此设置一个解决方案,例如 Memcached。这种方法有负面影响,即性能。然而,链的每个部分的性能开销的好处否定了这一点。Nginx 不必担心处理这些请求,因此它可以更高效地专注于其职责范围。
Apache 的 MPM 系统允许它在不需要其他模块的情况下处理静态和动态内容。对于动态内容,Apache 将语言处理器嵌入到每个工作线程中。这是一种很有效的简单方法。如果需要进行更改,您还可以更换模块。
2. 配置服务器
Nginx 与 Apache 之间更明显的区别之一是您如何配置每个服务器。Nginx 使用集中式方法,这意味着用户无法在一个主文件之外配置服务器。虽然这似乎是负面的,但它有很多优点:
- 服务器管理员负责全局安全,从整体上加强对服务器的访问。
- 集中式服务器比其他类型的服务器具有更高的性能。这是因为 Nginx 不需要处理检查每个目录中的配置文件的请求。
- 这里有一个连锁反应,因为不会有来自多个区域的服务器的任何覆盖,进一步减少请求时间。
外行知道他们使用 Apache 服务器的一种方式是.htaccess 文件的存在。这些是您几乎可以在服务器上的任何位置添加的配置文件。Apache 将在发出请求时检查 .htaccess 文件路径的每个元素。
这对于想要个性化他们的服务器部分但如果其中一个指令导致性能或安全问题可能会导致灾难的用户来说非常棒。这种分散的方法是您将看到 Apache 用于共享主机的原因之一。这也是 WordPress 等内容管理系统 (CMS) 在 Apache 服务器上提供良好性能的原因。
3. 请求解释
Nginx 与 Apache 的一个主要区别似乎并不明显的是它如何解释请求。简而言之:
- Nginx 使用统一资源标识符 (URI) 为每个组件解释和映射请求。
- Apache 也可以使用 URI 来解释请求,但更常见的是看到基于文件的路径结构。
因为 Apache 首先是一个 Web 服务器,它将使用 <Directory>、<Files> 或 <Location> 块来定义资源。这里的关键概念是 Apache“看到”的一切都与 Web 服务器相关,因此资源路径中没有歧义。想想文档树,这就是 Apache ‘可视化’服务器文件系统的方式。
相比之下,Nginx 有很多用例,例如负载均衡器、代理服务器和 Web 服务器。因此,请求需要作为 Nginx 的 URI 来处理它们。例如,Nginx 使用服务器和位置块:前者解释请求的主机,后者随后匹配 URI 部分。整个请求变成了一个 URI。
总的来说,URI 对 Nginx 来说更灵活,因为它可以适应它执行的任何功能。即便如此,Apache 的系统还是可以工作的,因为它只需要扮演 Web 服务器的角色。
Nginx vs Apache:2021 年你应该为你的服务器选择哪一个
我应该选择哪种服务器软件?很简单:这是您的托管服务提供商提供的任何一种。在很多情况下,您将没有选择。我们注意到,如果您想在 Nginx 与 Apache 之间做出决定,许多 Web 主机都遵循您应该匹配的相同模式:
- 如果您想运行需要持续配置的服务器,或者您想为用户提供配置选择,Apache 将满足您的需求。
- 但是,如果您想提供超强的性能、坚如磐石的安全性,并且想要处理配置而不是您的用户,那么 Nginx 是前进的方向。
在性能方面,Apache由于其固有的架构可以占用更多内存。Nginx 在高流量情况下会更好,尤其是当它必须处理大量静态内容时。
因此,如果您依靠缓存来存储和提供内容,Nginx 可能是最佳选择。但是,请记住,Nginx 无法提供动态内容,因此根据服务器使用的代理的效率,您将承受更多的性能损失。
结论
WordPress(以及运行网站)的许多领域提供了几乎压倒性的选择。这就是野兽的本性。但是,当您需要让您的网站快速上线时,它无济于事。
您选择的服务器类型是一项至关重要的一线决定,您需要格外小心。Nginx 与 Apache 是一个常见的比较,因为两者在某些情况下都有好处。
我们的观点是 Nginx 可以以更高的性能覆盖最多的基础,这使其成为大多数 WordPress 用户的更好选择。这就是为什么许多流行的以性能为中心的 WordPress 主机已经转向全 Nginx 服务器堆栈,包括Kinsta和Flywheel。
无论如何,如果您没有选择,您可以安全地使用主机提供的任何内容,并且大多数 WordPress 站点都可以使用任一 Web 服务器完全正常。
Nginx 与 Apache 之间的界限在哪里?在下面的评论部分让我们知道!