比较 Nginx 和 Apache (并学习如何选择)

以上皆是 Nginx的 Apache 是具有丰富功能集和高性能的成熟产品。 它们共享共同的开源来源,您可以将它们部署在 Windows 或 Linux 服务器。 

但是,一些关键差异可能会让您选择其中一个。

例如, Apache 是一个全面的解决方案,开箱即用地支持许多不同的技术和模块。 相比之下,Nginx 依赖第三方模块来扩展其功能。

看看哪个 Web服务器 可能更适合您的需求,让我们更深入地研究这些选项。

Apache – 原始英雄网络服务器

Apache

创建于 1995 年 罗伯特·麦库尔 最初称为“Apache HTTP 服务器项目”(因此得名), Apache 旨在创建一个强大的商业级服务器,即使进行修改也可以免费使用。 它迅速流行起来,因为它可以在许多不同的操作系统上运行,从 Unix 到 Windows。

由于这种长期流行,我认为 Apache 作为“原始英雄”网络服务器。 它是健壮的、有据可查的,并在 Apache 软件基金会。

Nginx——新时代的泰坦

Nginx的

Nginx(发音为“Engine X”)是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,用于托管各种规模的网站和应用程序。 它首先由俄罗斯开发商公开发布 Igor Sysoev. Nginx 最初的目标是解决 C10K 问题 Apache 努力管理。 

另请阅读

Nginx 对比 Apache – 显着差异

结构

Nginx 和 Apache 在他们的核心架构上有一些相似之处。 例如,它们都使用主从进程来提高性能。 他们甚至有类似的配置文件。 然而,架构风格的差异导致了显着的宽视角性能变化。

Nginx 具有资源友好的事件驱动架构,在负载下使用少量但恒定的内存。 此特性使其非常适合托管具有高流量水平或具有间歇性流量峰值的网站。

Apache的进程驱动架构通过专用线程处理每个连接,这需要更多内存。 但是,它在具有更多 CPU 内核和 RAM 的机器上的重负载下可以更好地扩展。

内存使用

Nginx 以高性能和低资源消耗着称。 另一方面, Apache 可能会占用大量内存,尤其是在运行多个服务器块时。 虽然两者都使用内存来处理 HTTP 请求,但 Nginx 更轻量级。 

设计 Apache 这意味着它为每个连接生成一个线程,并且每个线程将使用一定数量的 RAM。 随着流量的增加,这可能会导致问题,因为需要更多的 RAM,尤其是在内存较少的服务器上。 Apache 还为每个请求创建新进程,即使来自同一个用户。

相比之下,Nginx 使用一个进程一次处理多个连接。 

PHP 处理

因为这两个 Web 服务器都主要与 PHP,他们如何处理代码意味着巨大的性能潜力。 Nginx 不执行 PHP 默认直接。 相反,它将请求传递给 PHP-FPM(FastCGI进程管理器),它处理请求并将响应发送回 Nginx,然后 Nginx 将内容返回给客户端。

由于 Nginx 不等待来自 PHP-FPM 服务另一个请求(类似于它在服务静态内容时不等待来自客户端的响应),Nginx 可以同时处理比 Apache 将能够管理。

Apache 使用一个名为 mod_ 的模块php 执行 PHP 代码。 在这个模型中,每次 HTTP 请求进来时, Apache 产生一个新的进程或线程(取决于它的配置方式)来处理该请求。 此过程还负责处理任何 PHP 该请求中的请求。

这个模型有效,但它有一些缺点。 一方面,为每个请求生成一个新进程可能会在系统上占用大量资源,尤其是在有许多同时请求的情况下。 为每个人生成一个新流程 PHP 请求中的请求更加密集,因为操作系统必须为每个请求生成一个全新的解释器。

如何在 Nginx 和 Apache

如您所见,这些 Web 服务器庞然大物之间没有明显的赢家。 这主要取决于您需要网络服务器来管理什么。 

Apache 如果: 

  • 您正在运行一个中/大型网站,该网站可能会随着时间的推移而显着增长,并且需要自定义模块。
  • 您在服务器中启用了许多虚拟主机或模块,并且在启动时需要它们。
  • 您正在运行一个小型网站,不想花时间学习如何正确配置 Nginx。

在以下情况下使用 Nginx:

  • 您正在运行一个大型网站,并希望同时轻松配置缓存和负载平衡,而不必担心硬件限制。

关于 Nginx vs 的最终想法 Apache

无论你跑 Apache 或 Nginx 将取决于您的需求和您正在运行的硬件。 您可以使用任一选项进行服务 PHP 网站。 但除此之外,还有很多事情需要考虑。 

如果您有一个简单的网站,您可能不会注意到它们之间的任何区别。 但是,如果您的网站获得更多流量并增长,您将需要了解每台服务器在负载下的性能和扩展情况。

另请阅读

作者照片

文章 Timothy Shim