Apache_lighttpd_Nginx对比分析_你应该选择哪个Web服务器

Apache 和 Nginx 是当今为互联网提供动力的最流行的Web 服务器。他们共同负责为互联网上超过 50% 的流量提供服务。但近年来,Apache 出现了下滑,取而代之的是 Nginx。从高层次上讲,这两个平台做的核心事情是相同的:托管和服务web内容。因此,在一个特定的场景中,两者都具有独特之处。

1

Apache:功能丰富的 Web 服务器

Apache是世界排名第一的web服务器, 根据netcraft(www.netsraft.co.uk)所作的调查,世界上百分之五十以上的web服务器在使用apache.

1995年4月, 最早的apache(0.6.2版)由apache group公布发行. apache group 是一个完全通过internet进行运作的非盈利机构, 由它来决定apache web服务器的标准发行版中应该包含哪些内容. 准许任何人修改隐错, 提供新的特征和将它移植到新的平台上, 以及其它的工作. 当新的代码被提交给apache group时, 该团体审核它的具体内容, 进行测试, 如果认为满意, 该代码就会被集成到apache的主要发行版中.

apache 的特性:

1) 几乎可以运行在所有的计算机平台上.

2) 支持最新的http/1.1协议

3) 简单而且强有力的基于文件的配置(httpd.conf).

4) 支持通用网关接口(cgi)

5) 支持虚拟主机.

6) 支持http认证.

7) 集成perl.

8) 集成的代理服务器

9) 可以通过web浏览器监视服务器的状态, 可以自定义日志.

10) 支持服务器端包含命令(ssi).

11) 支持安全socket层(ssl).

12) 具有用户会话过程的跟踪能力.

13) 支持fastcgi

14) 支持java servlets

Apache 是一个模块化、流程驱动的 Web 服务器应用程序,它为每个同时连接创建一个新线程。它支持许多功能。其中许多被编译为单独的模块并扩展其核心功能。Apache 的模块可以提供从服务器端编程语言支持到身份验证机制的所有内容。

Apache Web 服务器是一个模块化应用程序,管理员可以在其中选择所需的功能并根据所需的特定功能安装不同的模块。所有模块都可以编译为 与主 Apache 文件分开存在的动态共享对象(DSO)。强烈建议使用 DSO 方法,因为它使从服务器配置中添加/删除/更新模块的任务非常简单。

Apache 架构的另一个基本特征是过滤器,它允许模块与其他模块创建的内容进行交互。这种交互包括加密、病毒扫描以及静态和动态内容的压缩。

管理员经常选择 Apache 是因为它的灵活性、功能和广泛的支持。

相关:

在Ubuntu中使用mod_status模块监视Apache性能 

快速在Ubuntu 20.04上架设LAMP服务器及WordPress博客  https://www.linuxmi.com/ubuntu-20-04-lamp-wordpress.html

2

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

Nginx 是俄罗斯软件开发者 Igor Sysoev 创建的,旨在解决一个名为 C10K 的问题——服务器如何支持10000个并发连接,也就是concurrent 10000 connection(这也是c10k这个名字的由来)。它是专门为解决 Apache Web 服务器的性能限制而编写的。该服务器于 2002 年首次创建为 rambler.ru 网站的扩展工具。

Nginx是十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.

Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配 Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。

nginx做为HTTP服务器,有以下几项基本特性:

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.

无缓存的反向代理加速,简单的负载均衡和容错.

FastCGI,简单的负载均衡和容错.

模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。

Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。

Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。

Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

相关:

如何在 Linux 上安装 Nginx Web 服务器  https://www.linuxmi.com/linux-nginx-web-server.html

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 HTTP 服务器文档

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 服务器服务于它们。

介绍lighttpd

Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。

Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。

Fastcgi的优点在于:

从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.

从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,

从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)

从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)

3种WEB服务器的比较:

server

Apache

Nginx     

Lighttpd

Proxy代理

非常好

非常好

一般

Rewriter

非常好

一般

Fcgi

不好

非常好

热部署

不支持

支持

不支持

系统压力比较

很大

很小

比较小

稳定性

非常好

不好

安全性

一般

一般

技术支持

非常好

很少

一般

静态文件处理

一般

非常好

Vhosts虚拟主机

支持

不支持

支持

反向代理

一般

非常好

一般

Session sticky

支持

不支持

不支持

注:在相对比较大的网站,节约下来的服务器成本无疑是客观的。而有些小型网站往往服务器不多,如果采用 Apache 这类传统 Web 服务器,似乎也还能撑过去。但有其很明显的弊端:Apache 在处理流量爆发的时候(比如爬虫或者是 Digg 效应) 很容易过载,这样的情况下采用 Nginx 最为合适。

建议方案:

Apache 后台服务器(主要处理php及一些功能请求 如:中文url)

Nginx  前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)

Lighttpd 图片服务器

总体来说,随着nginx功能得完善将使他成为今后web server得主流。

三、性能测试:

将分别测试3种软件在对动态页面和静态页面请求及并发时的响应时间

备注:因为文章较早,以下测试仅供参考

l 静态页面 搜狐首页

LIGHTTPD

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

64

60

462.75

21.6

/200

67

60

312.07

32.4

/500

83

60

137.24

72.8

/1000

出现错误丢包

94

60

126.6

78.9

NGINX

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

34.6

140

943.66

10.597

/200

35.6

110

924.32

10.818

/500

34.3

110

912.68

10.956

/1000

37

160

832.59

12.106

APACHE

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

40.6

170

690.72

14.47

/200

41.1

180

685.39

14.59

/500

42.3

190

633.64

15.78

/1000

43.1

200

547.53

18.26

l 动态页面 内部社区首页

LIGHTTPD

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

1000/100

50

200

33.54

29.816

1000/200

52

210

30.43

32.858

1000/500

54

230

25.79

38.76

1000/1000

62

250

24.83

40.28

NGINX

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

1000/100

53.8

250

83.12

12.305

1000/200

55.8

250

74.05

13.504

1000/500

56

260

58.99

16.951

1000/1000

58

260

43.41

23.347

APACHE

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

60

200

27.37

36.541

/200

61

220

23.82

41.981

/500

73

150

20.59

48.562

/1000

53

200

27.18

36.796

l PHPINFO函数页

LIGHTTPD

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

45

20

168.06

59.504

/200

47

22

140.64

71.103

/500

49

24

52.80

189.386

/1000

在请求到4840时测试测试程序死掉

NGINX

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

70

120

143.46

69.706

/200

72

130

140.57

71.140

/500

73

150

135.87

73.601

/1000

77

160

132.18

75.657

APACHE 出现丢包

n/-c(ab参数)

cpu%

Mem

RequestsperSecond

Time taken for tests

/100

70

180

245.73

40.694

/200

72

190

245.79

40.684

/500

75

200

241.29

41.443

/1000

77

220

236.74

42.239