Apache与Nginx:您应该选择哪种Web服务器

Apache和Nginx是当今互联网上最受欢迎的网络服务器。它们共同负责为互联网上超过50%的流量提供服务。但近年来,Apache在支持Nginx方面有所下降。

在高层次上,两个平台都做着相同的核心工作:托管和服务网络内容。此外,两者都具有满足特定计算需求的独特功能,使其中一个在各种场景中比另一个更适合。

Apache:一个功能丰富的Web服务器

Apache是一个模块化、进程驱动的web服务器应用程序,它为每个同时连接创建一个新线程。
它支持许多功能。其中许多被编译为独立的模块,并扩展了其核心功能。

此外,Apache模块可以提供广泛的服务。从服务器端编程语言支持到身份验证机制。

Apache web服务器是一个模块化应用程序
其中管理员可以选择所需的功能,并根据所需的特定功能安装不同的模块。

此外,所有模块都可以编译为
动态共享对象
(DSO),它们与Apache主文件分开存在。强烈建议使用DSO方法,因为它简化了从服务器配置中添加/删除/更新模块的过程。

Apache体系结构的另一个重要特性是“过滤器”
这允许模块与其他模块创建的内容进行交互。这种交互包括加密、病毒扫描以及静态和动态内容压缩。

因此,管理员通常选择Apache是因为它的灵活性、强大性和广泛的支持。

Nginx:专为性能和可扩展性而设计

Nginx是由一位名叫Igor Sysoev的俄罗斯软件开发商创建的,旨在解决一个被称为C10K的问题——处理10000个客户端与客户端的同时连接。它是专门为解决Apache web服务器的性能限制而编写的。

该服务器于2002年首次作为网站漫步者.ru的缩放工具创建。

NGINX是一款高性能异步web服务器。它使用事件驱动的体系结构来处理大量的连接。
由于各种原因,它现在比ApacheWeb服务器更受欢迎,我们将在本文中讨论这些原因。

Nginx主要用于提供静态文件,但它已经发展成为一个完整的web服务器,可以处理各种服务器任务。

如今,Nginx还被用作反向代理、负载均衡器和HTTP缓存。在某些用例中,Nginx还充当web加速器或SSL/TLS终止器。

管理员通常选择Nginx是因为它的资源效率和负载下的响应能力。

Apache与Nginx:详细比较

建筑学

在Apache与Nginx的情况下,它们运行的两个web服务器的体系结构存在根本差异。

最重要的是,Apache和Nginx之间的显著区别在于它们如何处理客户端请求。
Apache使用进程驱动的方法,并为每个请求创建一个新线程。相比之下,Nginx使用事件驱动的架构来处理一个线程中的多个请求。

在Apache中,单个线程只与一个连接相关联,而Nginx中的单个线程可以处理多个连接。

所有进程都与其他连接一起放入事件循环中,并进行异步管理。此过程消耗较少的内存,从而提高了性能。

除此之外,由于Nginx的内存消耗较低,它往往能够同时处理更多的连接,而不会使主机服务器过载。

如果Apache面临大量请求,它可能会消耗所有系统内存,并要求将数据存储在交换中,这会显著降低性能。

性能:静态/动态内容

网络服务器的性能主要由两个参数来判断,即其处理静态和动态内容的能力。

静态文件不需要处理,这有助于测量服务器的响应时间。那么,每台服务器交付小型静态文件的速度有多快呢?以下是Nginx在静态内容方面的亮点,因为文件可以直接快速地提供给客户端。

根据一项同时运行1000个连接的基准测试,Nginx的性能是Apache的2.5倍。同时,RAM消耗更低。此外,Nginx使用的系统内存减少了5-6%来处理负载。区别主要来自于服务器体系结构。

对于显示动态内容,测试结果显示Apache和Nginx的性能完全相同。

需要指出的是,Nginx不具备任何本地处理动态内容的能力。它不是为动态内容的本地处理而设计的。

例如,Nginx必须传递给外部处理器来处理PHP和其他动态内容请求。这可能会使事情稍微复杂一些,尤其是在预测允许的连接数量时。

与Ngnix不同,Apache可以通过在其每个工作实例中嵌入PHP等语言的处理器来处理动态内容。这允许它在web服务器内执行动态内容,而不依赖于外部组件。

自定义

Apache具有动态加载的模块
只要有需要就可以使用。该服务器支持许多不同的模块,包括官方模块和第三方模块。这使得Apache成为一个可定制的平台,用户可以根据自己的需求进行定制。

这些模块可用于重写URL、验证客户端、日志记录、缓存、强化服务器、压缩、加密等。动态模块可以大大扩展核心功能,而不需要做太多额外的工作。

同时,Nginx模块需要集成到内核中,不能动态加载。要包含非标准模块,用户必须从源代码编译服务器。

因此,Nginx web服务器缺乏这一功能使Apache在这方面更加灵活。

配置

除了主配置文件之外,Apache还允许通过
.htaccess
文件夹。中所做的更改
.htaccess
文件会立即应用于系统。

这些文件包括从重定向规则到内存限制的所有内容,并且更有效地允许web服务器的去中心化配置。此外,这种架构允许非特权用户控制其网站的某些方面,而不允许他们编辑主配置。

然而,这种灵活性是以牺牲性能为代价的。每一次
.htaccess
如果启用了文件,Apache必须遍历整个目录树,从请求的URL或文件到所有更高级别,直到服务器的根目录,然后为每个请求加载它们。

Nginx不允许额外配置。换句话说,它的配置是集中的。您有一个单独的文件来管理整个过程,这使得它在这方面更快,尽管灵活性要低得多。

Nginx的中心配置不如Apache使用的概念灵活。尽管如此,它还是提供了一个明显的安全优势:只有获得root权限的用户才能更改web服务器的配置。

因此,由于Nginx中不存在目录级配置,用户通过将指令写入主配置文件来执行所有配置更改。

支持

Apache和Nginx都是文档丰富的平台。因此,管理员不太可能遇到问题或在文档中找不到答案的问题。

  • Apache HTTP服务器文档
  • Nginx文档

关于操作系统支持,Apache在Linux和UNIX等所有操作系统上运行,并完全支持Microsoft Windows。Nginx也运行在几个现代的类Unix系统上,并支持Windows,但它在Windows上的性能不如在Unix平台上稳定。

因此,如果您想在Microsoft Windows上运行功能丰富的开源web服务器,Apache是唯一可用于生产的选项。

一起使用Apache和Nginx

然而,在比较Apache和Nginx时需要记住的一件事是,这并不总是一个非此即彼的决定。许多管理员将两者结合在一个混合解决方案中,充分利用各自的优势。

Apache和Nginx可以同时使用来创建工作负载优化的服务器。您可以在Apache前面使用Nginx作为服务器代理,这利用了Nginx的处理速度和处理大量流量的能力。

Nginx处理和服务静态内容,同时将动态内容转发到Apache(如下图所示)。

Nginx执行与HTTP相关的繁重工作——提供静态文件、缓存内容和卸载慢速HTTP连接,以便Apache服务器能够在安全可靠的环境中运行应用程序代码。

结论

在Apache与Nginx的比赛中,当涉及到切换服务器或服务器软件时,可能很难做出决定。决定哪台服务器最适合您主要是评估您的特定需求并确定最佳选项。

Apache和Nginx是开源的高性能web服务器,能够处理各种工作负载,以满足现代web需求。

如果你不需要很多网络服务器功能,Nginx就是你的选择。此外,在速度和性能方面,Nginx也是明显的赢家。因此,它非常适合高流量网站。

Nginx无法在许多方面与功能丰富的Apache竞争,但其异步状态和单线程闪电般快速的架构使其成为Apache的明智选择。

另一方面,在其他场景中,Apache可能是首选的web服务器。例如,Apache更适合于共享托管环境,并且可以提供一个控制面板,使服务器端的更改更容易。

因此,在选择Apache和Nginx之前,您需要仔细分析您的需求,您必须希望您的web服务器能够提供这些需求。

大鱼的头像

这个人很懒,什么都没有留下~

延伸阅读:

Windows 记事本终于获得自动更正和拼写检查功能

在首次引入 Windows 大约 41 年后,记事本终于更新了自动更正和拼写检查功能。这家科技巨头于今年 3 月推出了拼...

大鱼的头像
大鱼
2024 年 7 月 9 日
Ubuntu 的 apt 和 apt-get 命令有什么区别?

在Ubuntu及其他基于Debian的Linux发行版中,软件包管理是系统维护的一个重要方面。apt和apt-get是两...

大鱼的头像
大鱼
2024 年 6 月 26 日
Ubuntu远程桌面:如何设置和连接

远程桌面是一种允许您远程接管和使用另一台计算机的服务。在Ubuntu中,可以在图形客户端机器上启用它来控制主机。此功能对...

大鱼的头像
大鱼
2024 年 5 月 7 日
苹果公司在“放开”iPad活动上宣布的4款产品(以及你错过了什么)

利用当天的视频 苹果2024年5月的“放开”活动标志着iPad系列的一个重要里程碑,该公司推出了自成立以来最重大的升级。...

大鱼的头像
大鱼
2024 年 5 月 19 日
将照片从iPhone传输到iPhone的8种快速方法

已升级到新iPhone,是否要从旧设备中移动所有照片?或者你只是想从别人的iPhone上转移照片?以下是在两部iPhon...

大鱼的头像
大鱼
2024 年 5 月 19 日