Apache vs Nginx 服务器:这两种服务器类型的内幕

已发表: 2022-01-03

互联网在一组服务器上运行。 但是,它们的设置与标准台式机不同。 精明的系统管理员或后端开发人员会根据他们的需求优化此选择。 执行此操作的主要方法是选择服务器软件。 该领域的一个流行比较是 Apache 与 Nginx。

这是出于多种原因,但使用次数和寿命是两个主要因素。 Nginx 更新,可以说更适合现代 Web 标准。 然而,Apache 也没有采取任何措施,并且同样能够为全球数百万用户提供网站服务。

在这篇文章中,我们将为您提供 Apache 与 Nginx 的比较。 我们将研究表面元素,例如两种服务器类型的流行程度。 但是,我们还将深入研究每种技术的技术特性和注意事项。 最后,您将了解这两种软件类型的来龙去脉,以及哪一种最适合您的服务器。

Apache 和 Nginx 是什么

阅读本文意味着您可能了解 Web 服务器需要专业软件才能提供最佳性能。 虽然这篇文章不会涵盖一般意义上的服务器软件是什么或做什么,但我们将介绍适用于您的服务器的两个领先解决方案:

  • 阿帕奇。 这是大多数 Linux“发行版”预装的免费开源软件。 它自 1995 年以来一直存在,并且由于这两个因素,在市场上具有近乎领先的地位。
  • Nginx。 虽然与其他服务器软件相比它是一个相对的婴儿,但 Nginx 有很多用户。 在目前的写作中,它几乎与 Apache 并驾齐驱,成为最流行的服务器软件(稍后会详细介绍)。

值得注意的是,Apache 几十年来一直领先于服务器软件,并且在那个时候已经看到了很大的市场份额。 然而,Nginx 现在是领跑者,尽管差距不大。

显示 Apache 与 Nginx 的 Google 趋势图。

说明:来自 google Trends 的蓝线代表自 2004 年以来对 Apache 的搜索,而红线与 Nginx 相关。

至于 Apache 和 Nginx 带来了什么,这可能会写满几本书。 但是,我们将尝试在 2,000 字以内做到这一点——从两者的一般功能集开始。

Apache 和 Nginx 的一般特性

因为 Apache 和 Nginx 都是 HTTP Web 服务器软件,所以你会发现很多相似之处。 例如,它们都是开源的,这意味着它们可以在各种系统上工作。 通过扩展,两者都是灵活和可扩展的,但每种服务器类型都有不同的目标。

然而,Apache 与 Nginx 并不是真正的比较,因为这两种软件都以不同的方式处理配置 Web 服务器的过程。 实际上,两者都将更适合不同的应用程序。

在本文的其余部分,我们将通过分解 Apache 和 Nginx 的技术细节向您展示这一点。 以下是我们将要介绍的内容:

  • 每种服务器软件类型的技术细分,包括请求和连接处理、缓存技术等。
  • 配置和扩展 Apache,包括其.htaccess文件和模块的详细信息。
  • 你如何配置 Nginx,以及它的可扩展性。

这似乎不需要考虑太多,但您可以将每个部分解压缩为许多其他子部分。 我们将这样做,从技术差异开始。

Apache 和 Nginx 之间的技术差异

一般而言,Apache 和 Nginx 采用几乎独特且排他的路径来实现最佳 Web 服务器的相同目标。 如果你从广义上比较每一个,你会发现它们有多么不同:

  1. Apache 使用“流程驱动”架构,而 Nginx 使用“事件驱动”架构。
  2. 虽然这两种类型都服务器静态文件(尽管方式不同),但 Nginx 不服务器动态内容。
  3. 每种软件类型以不同的核心方式解释 HTTP 请求。

我们将从连接处理注意事项开始研究其中的一些方面。

连接处理

您会发现 Apache 与 Nginx 非常重视每种类型如何处理连接和请求。 例如,Apache 使用流程驱动的方法,它将使用名为mpm_prefork的处理模块为每个线程创建一个新请求。 如果请求的数量少于进程的数量,这可能会很快,但在此之后会降低性能。

事实上,Apache 使用mpm_preforkmpm_workermpm_event模块创建连接处理算法以满足您的需求提供了很大的灵活性。 相比之下,Nginx 的设计试图减轻 Apache 的负面性能方面。

它通过在事件驱动的基础上产生工作进程的方式来做到这一点。 这意味着 Nginx 非常适合扩展,因为它可以在单个线程中管理多个请求。

请求口译

Apache 和 Nginx 也采用不同的方法来解释服务器将接收到的请求。 例如,Nginx 使用请求的统一资源标识符 (URI) 将其转换为文件系统的物理元素。

您可以在某些配置块的格式中看到这一点,例如serverlocation 。 它们一起工作以解析 URI 并将其转换为文件系统中的内容。

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

相比之下,Apache 作为“纯”网络服务器软件的根源意味着它假定每个请求都是文件系统中的资源并在此基础上采取行动。 但是,Apache 也可以使用请求更抽象的 URI。 尽管如此,文档还是警告不要使用基于文件的方法以外的任何方法。

静态与动态性能

在性能方面,Apache 与 Nginx 是几乎每个用户的重要考虑因素。 在上下文中,比较归结为每种软件类型如何提供静态和动态内容。

因为 Apache 的固有架构直接与文件系统一起工作,所以它非常适合提供静态内容。 但是,它还将处理服务器内的动态内容,这是一个类似的实现,如果您需要根据您的要求换出模块,它也很灵活。

相比之下,Nginx 根本不处理任何动态内容。 它更复杂,因为 Nginx 必须将这些请求传递给外部工作人员或协议。 即便如此,您会发现性能开销更少,并且 Nginx 可以利用其他具有更大适应性的协议。

对于静态内容,这可以像 Apache 一样简单,并且在某些情况下是性能更好的选择。 这是因为 Nginx 可以在需要时联系解释器,而不是它是服务器软件整体性能的固有部分。

Apache 的分布式配置模型

毫不奇怪,Apache 和 Nginx 都有不同的服务器配置方法。 简而言之,Apache vs Nginx 的配置取决于您是否可以在目录级别这样做。

Apache 使用分布式模型,这意味着您可以基于每个目录配置服务器。 您将通过.htaccess文件执行此操作。 Apache 将检查所请求文件路径的每个组件是否有.htaccess文件,并执行其中的指令。

显示 mod_rewrite 模块以及一些重写规则的 .htaccess 文件。

在我们看来, .htaccess文件比任何其他系统都灵活得多。 它可以快速查找、打开和编辑。 触手可及执行许多强大动作的力量是巨大的。 您还会发现,只要 Apache 服务器发现一个.htaccess文件,它就会处理它,而无需重新加载服务器。

如果您需要让某些用户在影响整个服务器配置的情况下控制其站点的各个方面,这也太棒了。 这就是为什么 Apache 服务器及其灵活的模块系统成为共享托管平台的支柱。

阿帕奇的模块

您可以使用 Apache 动态加载和卸载模块。 这类似于在 WordPress 中使用插件和主题:核心 Apache 功能执行基本步骤,而活动模块帮助您创建独特的体验。

这些模块可以覆盖很多领域,并且有很多可用的。 mod_php等模块可以改变服务器的核心功能,而流行的mod_rewrite可以让您执行许多其他任务:

  • 限制 IP 地址。
  • 更改站点的主文件夹。
  • 执行 301 重定向。
  • 设置默认主页。

.htaccess和动态模块系统之间,Apache 为大多数用户提供了一种清晰的方式来修补和优化 Web 服务器和站点。

Nginx 的集中配置模型

Nginx 对服务器配置采取集中式方法。 这意味着只有一个配置文件(以.conf扩展名结尾)。 根据您的服务器结构,有时很难找到。

对于想要更改服务器的新站点所有者来说,这有一些明显的缺点。 对于共享主机上的站点,几乎不可能配置服务器。 灵活性也小得多。

但是,也有一些基于性能的优势。 因为 Nginx 的配置文件只有一个位置,而 Apache 可能会使用多个位置,所以只有一个查找。 通过扩展,定位该配置文件的性能影响也较小。

您还会发现,由于配置是中心化的,因此站点所有者将没有责任管理与安全相关的方面。 这是 Nginx 方法的另一个好处,因为安全责任仅落在系统管理员的肩上。

Nginx 的模块

公平地说,尽管 Nginx 的模块系统提供了相同的功能,但它远不如 Apache 那样宽松或灵活。 以 Nginx 的重定向规则为例:

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

这是因为您无法使用 Nginx 将它们作为动态元素加载。 回到我们的 WordPress 类比,这就像必须重新安装整个站点才能停用插件。

从表面上看,这似乎行不通,而且似乎是一个巨大的损害。 然而,你缺乏灵活性,你会获得核心稳定性和功能。 如果您知道服务器在构建时需要什么,则可以包含所有这些组件和模块。

还有一个安全方面需要考虑。 因为您不会在系统内外交换动态模块,所以您会知道每个元素可以做什么和可以做什么。 它使您的服务器的结构和体系结构清晰且易于维护,并且性能更高。

为什么要使用 Apache 或 Nginx

综上所述,Apache vs Nginx 并不是一个明确的决定。 首先,关于 Nginx 比 Apache 表现更好的典型观点具有误导性。 如果你设置好 Apache 服务器,它的性能与等效的 Nginx 服务器一样。

Apache 非常适合以简单的方式提供静态和动态内容。 它为那些刚开始管理服务器的人提供了强大的功能,配置灵活性。 一般来说,与 Nginx 相比,配置 Apache 服务器所需的技术知识更少。

然而,性能是 Nginx 的亮点。 其体系结构的设置确保它可以在每个处理器周期内实现比 Apache 服务器更多的性能。 尽管设置的灵活性较低。

在某些情况下,您可能无法选择 Apache 还是 Nginx,尤其是在您使用共享主机的情况下。 但是,如果您这样做,选择将取决于您的专业知识、目标和需求。

概括

您对服务器软件的选择很重要,您可以使用无数种选择。 实际上,您不会从左侧字段中选择服务器类型。 相反,您通常会从两种或三种类型中进行选择。 Apache 与 Nginx 是一个经常被考虑的比较,因为两者都提供了出色的长期性能和可靠性。

本文研究了 Apache 与 Nginx 在这两个方面以及更多方面的比较。 有很多技术因素需要考虑,这将比特定服务器软件在社区中的受欢迎程度更能影响您的选择。

你对 Apache 和 Nginx 有什么看法吗? 在下面的评论部分与我们分享您的想法!