大家好,我是尧哥。
Apache vs Nginx 是当之无愧的话题。如果你对哪款服务器更适合你感到困惑,那么久让我们在本文中找出答案吧。
Apache 和 Nginx 是当今为互联网提供动力的最流行的Web 服务器。他们共同负责为互联网上超过 50% 的流量提供服务。但近年来,Apache 出现了下滑,取而代之的是 Nginx。从高层次上讲,这两个平台做的核心事情是相同的:托管和服务web内容。因此,在一个特定的场景中,两者都具有独特之处。
1
Apache:功能丰富的 Web 服务器
Apache 是一个模块化、流程驱动的 Web 服务器应用程序,它为每个同时连接创建一个新线程。它支持许多功能。其中许多被编译为单独的模块并扩展其核心功能。Apache 的模块可以提供从服务器端编程语言支持到身份验证机制的所有内容。
Apache Web 服务器是一个模块化应用程序,管理员可以在其中选择所需的功能并根据所需的特定功能安装不同的模块。所有模块都可以编译为 与主 Apache 文件分开存在的动态共享对象(DSO)。强烈建议使用 DSO 方法,因为它使从服务器配置中添加/删除/更新模块的任务非常简单。
Apache 架构的另一个基本特征是过滤器,它允许模块与其他模块创建的内容进行交互。这种交互包括加密、病毒扫描以及静态和动态内容的压缩。
管理员经常选择 Apache 是因为它的灵活性、功能和广泛的支持。
相关:
2
Nginx:专为性能和可扩展性而设计
Nginx 是俄罗斯软件开发者 Igor Sysoev 创建的,旨在解决一个名为 C10K 的问题——服务器如何支持10000个并发连接,也就是concurrent 10000 connection(这也是c10k这个名字的由来)。它是专门为解决 Apache Web 服务器的性能限制而编写的。该服务器于 2002 年首次创建为 rambler.ru 网站的扩展工具。
相关:
NGINX 是一个高性能的异步 Web 服务器。它使用事件驱动的架构来处理大量的连接。由于我们将在本文中看到的各种原因,它现在比 Apache Web Server 更受欢迎。
Nginx 主要用于提供静态文件,但今天,它已经发展成为一个完整的 Web 服务器,可以处理所有服务器任务。如今,Nginx 也被用作反向代理、负载均衡器和 HTTP 缓存。在某些用例中,Nginx 还用作 Web 加速器或 SSL/TLS 终结器。
管理员经常选择 Nginx 是因为它的资源效率和负载下的响应能力。
3
Apache 与 Nginx:详细对比
架构
在 Apache 与 Nginx 的情况下,它们运行的两个 Web 服务器的架构之间存在核心差异。
最重要的是,Apache 和 Nginx 之间的主要区别在于它们如何处理客户端请求。Apache 使用流程驱动的方法并为每个请求创建一个新线程。而 NGINX 使用事件驱动架构在一个线程中处理多个请求。
在 Apache 中,单个线程只与一个连接相关联,而 Nginx 中的单个线程可以处理多个连接。所有进程都与其他连接一起放入事件循环中,并进行异步管理。此过程消耗更少的内存,从而提高性能。
最重要的是,由于 Nginx 的内存消耗较低,它往往能够同时处理更多的连接而不会使主机服务器过载。如果 Apache 面临大量请求,它最终可能会消耗所有系统内存并要求将数据存储在交换中,这会显着降低性能。
性能:静态/动态内容
Web 服务器的性能主要由两个参数来判断,即处理静态内容和动态内容的能力。
静态文件不需要处理,因此这对于测量服务器的响应时间很有用。那么,每台服务器能以多快的速度交付小型静态文件呢?当涉及到静态内容时,这里是 Nginx 的亮点,因为文件可以直接、快速地提供给客户端。根据通过运行多达 1000 个同时连接执行的基准测试,Nginx 的执行速度比 Apache 快 2.5 倍。同时,RAM消耗更低。为了处理负载,Nginx 使用的系统内存减少了 5-6%。区别主要来自服务器架构。
对于显示动态内容,测试结果显示 Apache 与 Nginx 的性能完全相同。
Nginx 没有任何原生处理动态内容的能力。它不是为动态内容的本地处理而设计的。Nginx 必须传递给外部处理器来处理 PHP和其他动态内容请求。这可能会使事情稍微复杂化,尤其是在尝试预测允许的连接数量时。
与 Ngnix 不同,Apache 可以通过将 PHP 等语言的处理器嵌入到其每个工作实例中来处理动态内容。这允许它在 Web 服务器本身内执行动态内容,而无需依赖外部组件。
定制
Apache 具有动态加载的模块,可以在需要时使用。该服务器支持许多不同的模块,包括官方和第 3 方。这使得 Apache 成为一个非常可定制的平台,用户可以根据自己的需要进行定制。这些模块可用于重写 URL、验证客户端、日志记录、缓存、强化服务器、压缩、加密等。动态模块可以大大扩展核心功能,而无需太多额外的工作。
Nginx 模块需要集成到内核中,不能动态加载。要包含非标准模块,用户必须从源代码编译他们的服务器。
Nginx Web 服务器缺乏这种能力,使得 Apache 在这方面更加灵活。
配置
除了主配置文件之外, Apache 还允许通过.htaccess文件在每个目录的基础上进行附加配置。对 .htaccess 文件所做的更改会立即应用于系统。这些文件包括从重定向规则到内存限制等等的所有内容,并有效地允许 Web 服务器的分散配置。此外,此架构允许非特权用户控制其网站的某些方面,而无需授予他们编辑主配置的权限。
然而,这种灵活性是以牺牲性能为代价的。每次.htaccess启用文件时,Apache 必须遍历整个目录树,从请求的 URL 或文件通过所有更高级别直到服务器的根目录,然后为每个请求加载它们。
Nginx 不允许额外的配置。它的配置是集中的。你有一个管理整个过程的文件,这使它在这方面快得多,尽管灵活性要低得多。Nginx 的中央配置不如 Apache 使用的概念灵活,但它提供了明显的安全优势:只有获得 root 权限的用户才能更改 Web 服务器的配置。
由于 Nginx 中没有目录级别的配置,因此用户通过将指令写入主配置文件来执行所有配置更改。
支持
Apache 和 Nginx 都是文档齐全的平台。管理员不太可能遇到问题或遇到无法在其文档中找到答案的问题。
在操作系统支持方面,Apache 可以在 Linux 和 UNIX 等所有操作系统上运行,并且完全支持微软 Windows。Nginx 也可以在几个现代的类 Unix 系统上运行,并且支持 Windows,但它在 Windows 上的性能不如在 UNIX 平台上稳定。因此,如果你想在微软 Windows 上运行功能丰富的开源 Web 服务器,Apache 确实是唯一的生产就绪选项。
4
Apache 和 Nginx 一起配合使用
但是,在比较 Apache 和 Nginx 时要记住的一件事是,它并不总是必须是非此即彼的决定。许多管理员将两者结合在一个混合解决方案中,充分利用各自的优势。
Apache 和 Nginx 可以并排使用来创建工作负载优化的服务器。你可以在 Apache 前面使用 Nginx 作为服务器代理,它利用 Nginx 的处理速度和处理大流量的能力。Nginx 处理和提供静态内容,同时将动态内容转发给 Apache(如下图所示)。
Nginx 执行与 HTTP 相关的繁重工作——提供静态文件、缓存内容和卸载慢速 HTTP 连接,以便 Apache 服务器可以在安全可靠的环境中运行应用程序代码。
结论
在 Apache 与 Nginx 的比赛中,在切换服务器或服务器软件时做出决定可能很困难。确定最适合你的服务器很大程度上取决于评估你的特定要求并确定最佳选择。Apache 和 Nginx 都是开源的高性能 Web 服务器,能够处理各种工作负载以满足现代 Web 需求的需求。
如果你不需要很多 Web 服务器功能,Nginx 是你的最佳选择。此外,在速度和性能方面,Nginx 也是明显的赢家。它非常适合高流量网站。
Nginx 在许多方面都无法与功能丰富的 Apache 竞争,但它的异步状态和单线程闪电般的快速架构使其成为超越 Apache 的明智选择。
另一方面,Apache 可能是其他场景中首选的 Web 服务器。Apache 更适合共享托管环境,并且可以提供一个控制面板,从而更容易进行服务器端更改。
因此,在 Apache 和 Nginx 之间进行选择之前,你需要仔细分析你的需求,你必须希望你的 Web 服务器服务于它们。
< END >