Apache和Nginx比较

参考:
Apache 与 Nginx 实际比较
Apache与Nginx的优缺点比较

介绍

Apache 和 Nginx 是世界上最通用的两大开源 Web 服务器。他们正为超过 50% 互联网流量传输提供服务。两种解决方案都能处理各种的工作场景,并与其他软件协同工作,从而提供完善的 Web 技术栈。

尽管 Apache 和 Nginx 有许多共通的特性,并不能将它们视为可以完全相互替代的。它们各有所长。了解使用场景对你重新评估选择你的 web 服务器非常重要,这篇文章将专注于讨论两种服务器如何应对不同场景。

概览

在深入比较 Apache 和 Nginx 之前,让我们快速浏览一下这两个项目各自的背景和特点。

Apache

Apache HTTP 服务器由 Robert McCool 在 1995 年创建,并从 1999 年开始在 Apache 软件基金会的指挥下进行开发。由于这个 HTTP web 服务器是基金会的原始项目,并且到目前为止也是他们最流行的软件之一,于是常常将它简称为“Apache”。

自从 1996 年, Apache web 服务器就已经是互联网上最流行的服务器了。正因为如此普及,Apache 从丰富的文章中受益,并被许多其他软件项目集成支持。

之所以管理员们选择使用 Apache,是因为它的灵活、高效以及广泛的支持。它通过一个动态加载模块系统来实现可扩展,并且能在不连接外部软件的情况下,独自处理大量解释型语言。

Nginx

在 2002 年,Igor Sysoev 开始研发 Nginx 来解决 C10K 问题——在当时需要 web 服务器同时处理一万个连接以应对现代网络的需求——这是一个艰难的挑战。它的首个公开版本发布是在 2004 年,通过异步的事件驱动架构得以实现目标。

得益于它的轻量级资源利用,和它在简单硬件设施上的扩展能力,Nginx 自从发布后日益流行。Nginx 擅长于快速处理静态内容,并且它被设计为可向其他软件传递动态请求,这更符合它的开发目的。

之所以管理员们选择使用 Nginx,是因为它的资源利用度以及负载时的响应能力。Nginx 的拥护者欣赏它专注于 web 服务器的核心以及它的代理特性。

连接处理架构

Apache 和 Nginx 最大的不同在于它们对连接和流量传输处理的方式。下文将论述当它们响应不同的流量状况时,表现出的最关键的不同之处。

Apache

Apache 提供一系列多路处理模块(Apache 称这些为 MPMs),用于指示如何处理客户端请求。大致来说,它允许管理员轻松地更换它的连接处理架构。模块如下:

mpm_prefork:这个处理模块产生许多单一线程的子进程,每个线程用来处理请求。每个子进程每次处理一个客户端连接。只要请求数小于进程数,MPM 是非常快的。然而,当请求数大于进程数时,性能会下降得非常快。于是在很多场景下,这不是一个好的选择。每个进程会严重影响到内存的消耗,因此 MPM 不利于有效扩展。如果结合其他不是运行在线程上的组件,这也是不错的。比如,PHP 是非线程安全的,于是多路处理模块推荐唯一安全的方法是使用 mod_php 模块来处理这些文件。

mpm_worker:这个模块产生许多可管理多线程的进程。每个线程能处理单个连接。这些线程比进程更高效,这意味着这个 MPM 扩展性要好于 mpm_prefork。因为线程数要多于进程数量,这也就意味着新的连接能立刻得到一个空闲的线程,而不用等待进程空闲。

mpm_event:这个模块在大多数场景下跟 mpm_worker 模块很相似,但是它能选择是否处理长连接(keep-alive connection)。当使用 mpm_worker 模块,为了保持连接长时间可用,于是无论请求是否是活跃的,其线程会一直被这个连接占用。这个模块保证模块能脱离长连接请求的束缚,从而更快的执行。在 Apache 2.4 版本中这个功能被标记为稳定的。

正如你所见,Apache 提供一个灵活的架构,能够选择不同的连接和请求处理算法。这些备选项主要是随着服务器演变,随着因互联网规模的改变导致请求并发量的需求增长而产生的功能。

Nginx

Nginx 在 Apach

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值