Web 服务器是 Internet 的核心。如果没有像 Apache 和 NGINX 这样的网络服务器软件,网络就不会是我们今天看到的样子。但是,它们不可互换。要了解这两个选项(Apache 与 NGINX)中的哪一个最适合您,您需要了解它们的工作原理。
在本文中,我们将讨论什么是 Web 服务器及其工作原理,并介绍 Apache 和 NGINX。然后,我们将比较 Apache 和 NGINX 的主要区别,并讨论它们的优缺点。
让我们开始吧!
什么是网络服务器?
简而言之,网络服务器就是专门用来运行服务器软件的计算机,例如Apache或NGINX。 Web 服务器既存储站点文件又处理传入请求以访问它们。
最后一个任务是web服务器软件,这是一个重要的职责。对于热门网站,你使用的软件可能需要在短时间内处理大量的请求,所以一定要根据任务来定。 NGINX 和 Apache 都能够扩展和处理大量请求。但是,这两个服务器选项的工作方式在核心级别是不同的。
Web 服务器软件与其他几个组件协同工作,为现代网站和应用程序提供服务。例如,要在服务器上设置 WordPress,您需要以下组件:
- 支持 HTTPS 的 Web 服务器:这可以是 Apache、NGINX 或其他一些选项。
- PHP:WordPress 是基于 PHP 语言构建的,因此您需要它来运行您的内容管理系统 (CMS)。
- 数据库软件:可以是MySQL或MariaDB。
在本文中,我们将只关注 Web 服务器软件。但是,重要的是要了解软件不是在真空中运行的。在某些情况下,您甚至可以将 Apache 和 NGINX 等 Web 服务器配置为协同工作。网站可以做到这一点的一种方法是将 NGINX 配置为反向代理,同时使用 Apache 作为主要服务器软件。您可以使用各种应用程序。
Apache介绍
/ p >
长期以来,Apache 是大多数网站的默认 Web 服务器选项。该软件自 1995 年 Robert McCool 推出 Apache HTTP Server 以来一直存在。几年后,Apache 软件基金会接手维护,Apache 成为开源软件。
Apache 获得了广泛的普及,因为它安装在几个主要的 Linux 发行版中。在 Web 服务器方面,Linux 的流行使 Apache 多年来成为事实上的选择。
Apache 名称在 Linux 中根深蒂固,以至于操作系统 (OS) 对其服务器进程使用 httpd 命令(在 Apache 本身中可以找到)。但在 Web 服务器方面,Apache 并不是唯一的大牌。
NGINX介绍
/ p >
NGINX 是由 Igor Sysoev 设计的,能够处理所谓的“C10K 问题”。这涉及优化网络以能够处理多达 10,000 个并发连接。换句话说,创建 NGINX 时考虑到了最大的可扩展性。
这个开源软件于 2004 年发布,现在有两种许可类型。您拥有开源版本和 NGINX Plus,这是一个包含专业支持和其他功能的企业解决方案。
刚开始时,由于与 Apache 相比安装难度大,大多数网站使用 NGINX 来仅处理静态请求。多年来,NGINX 的市场份额稳步增长。
根据一些调查,NGINX 已经超过 Apache 成为世界上最受欢迎的 Web 服务器软件。其他数字让Apache跟随:
图片来源:W3Techs。
的确,在网络上最受欢迎的站点中,NGINX 比 Apache 更受欢迎。这是因为 NGINX 在可扩展性方面具有不可否认的优势,这对于获得大量流量的站点至关重要。
或者,如果您不想将 NGINX 用作网络服务器,它可以作为反向代理或负载均衡器来“双重职责”。换句话说,它可以完成比 Apache 更多的角色。
但是,这并不是说如果您正在考虑更换服务器,NGINX 应该是您的默认选择。在接下来的几节中,我们将分解每个软件的独特之处。
Apache 与 NGINX:3 个主要区别
在我们讨论哪种服务器解决方案最适合您之前,我们需要分析一下它们的不同之处。让我们从讨论 Apache 与 NGINX 的请求处理开始。
1.请求管理
警告 - 这是技术性更强的地方。 Apache 使用它所谓的多处理模块 (MPM) 来处理连接。该软件允许您在三种类型的 MPM 之间进行选择:
- mpm-prefork:该模块创建一个单线程进程来处理每个请求。反过来,每个“孩子”只能处理一个连接。
- mpm_worker:该模块可以启动一个多线程进程,每个线程可以管理一个连接。
- mpm_event:在大多数情况下,此模块与 mpm_worker 的工作方式相同,但经过优化以保持连接处于活动状态。
Apache 的一个独特之处在于,它使您能够选择要使用的模块,并根据需要更换它们。默认情况下,Apache 使用 mpm-prefork 模块,它非常适合少量并发连接。在扩展方面,mpm_worker 模块更好,但它需要额外的服务器资源。
相反,NGINX 使用所谓的“事件驱动”方法。该软件使用多线程进程,每个线程能够处理多个连接。
此外,NGINX 异步处理传入的请求。简而言之,这意味着 NGINX 可以使用更少的服务器资源管理更多的请求,从而使其在这方面更加高效。
2.服务器配置
Apache 使用 .htaccess 文件来设置有关如何处理传入请求的特定规则。这些文件包括从重定向规则到内存限制的所有内容。
使用 Apache,您可以为服务器树中的每个目录创建单独的 .htaccess 文件。例如,如果您设置了一个共享服务器,您可以让托管在该服务器上的每个网站都设置自己的 .htaccess 文件。
这种高度灵活性的缺点是需要单独解释沿请求路径运行的每个 .htaccess 文件。这意味着请求可能需要更长的时间来执行。
在配置方面,NGINX 没有提供相同级别的灵活性。您可以使用一个主文件来管理整个事情,而不是直接级别的配置文件。
3.模块
模块是附加组件,您可以将其与您选择的服务器软件一起使用,以扩展其默认功能。考虑到 Apache 的历史和流行程度,它在模块选择方面优于 NGINX 也就不足为奇了。
Apache 不仅提供了更多模块,而且通常更容易找到有关如何使用它们的文档和教程。此外,Apache 允许您随意安装、启用和禁用模块,从而为您提供了高度的灵活性。
NGINX 不提供相同的优势。要使用模块,您需要将它们编译到 NGINX 核心中。此外,模块一旦编译就无法禁用,这使得交换选项更加困难。
重要的是要注意 NGINX Plus 确实包含一个动态模块功能,可以让您随意禁用和启用模块。然而,即使使用 Plus,这些模块仍然需要使用 NGINX 核心进行编译才能使用。
虽然NGINX的模块库和文档在以稳定的速度增长,但是在体量上还是比不上Apache。考虑到 NGINX 如何继续获得更多的市场份额,这可能会在不久的将来发生变化。
Apache 与 NGINX 的优缺点
到目前为止,您已经了解了 Apache 和 NGINX 之间的核心区别。现在,让我们简要描述一下每个软件的优缺点。
Apache
首先,让我们谈谈使用 Apache 的主要好处:
- 更容易设置和配置
- 使用.htaccess文件的帮助,可以更精细地控制服务器的配置
- 模块选择更好,可以随意启用和禁用模块
- 您可以决定如何使用不同的处理请求的模块
使用 Apache 与 NGINX 的主要缺点是后者扩展性更好。如果您的网站仍处于成长阶段,Apache 应该足以处理流量。
但是,如果您的网站取得巨大成功,有时您可能需要考虑更新服务器堆栈。这可能意味着切换到 NGINX 或将其用作 Apache Web 服务器的反向代理。
NGINX
就Apache而言,NGINX有两个明显的优势——性能和可扩展性。更具体地说,NGINX 更擅长:
- 处理大量并发请求
- 以更少的硬件资源获得更好的性能
- 更快地提供静态内容
最后一部分是为什么这么多人选择使用 NGINX 作为反向代理解决方案。尽管 NGINX 具有与性能相关的所有优点,但它并非没有缺陷。
虽然只有一个配置文件可以减少请求次数,但这也意味着NGINX不如Apache灵活。这也适用于模块,因为 NGINX 的开源版本会强制您编译模块以使用它们——而且您不能禁用它们。实际上,这意味着设置 NGINX 使其按照您的意愿工作可能比使用 Apache 复杂得多。
使用 NGINX 的主要原因是性能是您最关心的问题。在某些时候,流行的网站需要花费大笔资金来处理大量流量,而不会导致停机、加载时间过长等。而且,由于 NGINX 允许您以更少的硬件资源获得更好的性能结果,因此成本可能更高- 有效的选择。
结论
切换服务器或服务器软件始终是一个重大决定。因此,理想情况下,您会希望使用可以长期坚持使用的服务器解决方案。
在 Apache 和 NGINX 之间做出选择似乎并不那么明确。在许多情况下,这个决定将取决于您,因为您的虚拟主机将决定使用什么软件。在实际层面上,您需要进行研究并找出您的网络托管服务商在使用它们之前使用的选项。
关于如何在Apache和NGINX之间做出选择,你有什么疑问吗?让我们在下面的评论部分讨论它们!
ProStockStudio/shutterstock.com 的文章缩略图
资源