网站搜索

为什么我发现 Nginx 实际上比 Apache 更好


根据 Netcraft 在 2017 年底(即 11 月)进行的最新 Web 服务器调查,Apache 和 Nginx 是互联网上使用最广泛的开源 Web 服务器。

Apache 是一个免费的开源 HTTP 服务器,适用于类 Unix 操作系统和 Windows。它被设计为一个安全、高效和可扩展的服务器,提供与流行的 HTTP 标准同步的 HTTP 服务。

自 1996 年推出以来,Apache 一直是互联网上最受欢迎的 Web 服务器。它是 Linux 和开源生态系统中 Web 服务器的事实上的标准。 Linux 新用户通常会发现它的设置和使用更容易。

Nginx(发音为“Engine-x”)是一款免费、开源、高性能的 HTTP 服务器、反向代理和 IMAP/POP3 代理服务器。就像 Apache 一样,它也运行在类 Unix 操作系统和 Windows 上。

它以其高性能、稳定、配置简单、资源消耗低等特点而广受人们的欢迎,在互联网上的使用率也越来越高。现在,它已成为经验丰富的系统管理员或顶级网站的网站管理员的首选 Web 服务器。

一些繁忙的网站由以下技术支持

  • Apache 包括:PayPal、BBC.com、BBC.co.uk、SSLLABS.com、Apple.com 等等。
  • Nginx 包括:Netflix、Udemy.com、Hulu、Pinterest、CloudFlare、WordPress.com、GitHub、SoundCloud 等。

网络上已经发布了许多关于 ApacheNginx 之间的比较的资源(我的真正意思是“Apache Vs Nginx”文章),很多其中清楚详细地解释了它们在各种场景下的主要功能和操作,包括实验室基准测试中的性能测量。因此,这里不讨论这个问题。

我将简单地分享我对整个辩论的经验和想法,在下一个基于托管现代 Web 应用程序的要求的生产环境中尝试了 ApacheNginx 。部分。

我发现 Nginx 实际上比 Apache 更好的原因

以下是我更喜欢 Nginx Web 服务器而不是 Apache 来进行现代 Web 内容交付的原因:

1.Nginx 是轻量级的

Nginx 是轻量级 Web 服务器之一。与 Apache 相比,它在系统上占用的空间较小,Apache 实现了运行应用程序所需的广泛功能。

由于 Nginx 汇集了一些核心功能,因此它依赖于专用的第三方上游 Web 服务器,例如 Apache 后端、FastCGI、Memcached、SCGI 和 uWSGI 服务器或应用程序服务器,即特定于语言的服务器,例如 Node.js、Tomcat , ETC。

因此,它的内存使用比 Apache 更适合有限的资源部署。

2. Nginx 专为高并发而设计

与 Apache 的面向线程或进程的架构(每个连接进程或每个连接线程模型)相反,Nginx 使用可扩展的事件驱动(异步)架构。它采用针对可用硬件资源定制的可靠流程模型。

它有一个主进程(执行特权操作,例如读取配置和绑定到端口)并创建多个工作进程和帮助进程。

每个工作进程可以同时处理数千个 HTTP 连接,读取内容并将其写入磁盘,并与上游服务器通信。辅助进程(缓存管理器和缓存加载器)可以管理磁盘内容缓存操作。

这使得其操作可扩展,并产生高性能。这种设计方法进一步使其速度更快,有利于现代应用。此外,还可以使用第三方模块来扩展Nginx的本机功能。

3.Nginx易于配置

Nginx 具有简单的配置文件结构,使其非常易于配置。它由由配置文件中指定的指令控制的模块组成。另外,指令分为块指令和简单指令。

块指令由大括号({})定义。如果块指令可以在大括号内包含其他指令,则称为上下文,例如事件、http、服务器和位置。

http {
	server {
		
	}
}

一个简单的指令由由空格分隔的名称和参数组成,并以分号 (;) 结尾。

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

例如,您可以使用 include 指令包含自定义配置文件。

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

对我来说,一个实际的例子是我如何轻松配置 Nginx 来运行具有不同 PHP 版本的多个网站,这对 Apache 来说是一个挑战。

4.Nginx 是一个优秀的前端代理

Nginx 的常见用途之一是将其设置为代理服务器,在这种情况下,它接收来自客户端的 HTTP 请求,并通过不同的协议将它们传递到上面提到的代理服务器或上游服务器。您还可以修改发送到代理服务器的客户端请求标头,并配置来自代理服务器的响应的缓冲。

然后它接收来自代理服务器的响应并将其传递给客户端。与 Apache 相比,配置为代理服务器要容易得多,因为大多数情况下默认启用所需的模块。

5. Nginx 在提供静态内容方面表现出色

静态内容或文件通常是存储在服务器计算机磁盘上的文件,例如 CSS 文件、JavaScript 文件或图像。让我们考虑一个使用 Nginx 作为 Nodejs(应用程序服务器)前端的场景。

尽管 Nodejs 服务器(特别是 Node 框架)具有内置的静态文件处理功能,但它们不需要进行一些密集处理来交付非动态内容,因此将 Web 服务器配置为直接向其提供静态内容实际上是有益的。客户。

Nginx 可以更好地处理特定目录中的静态文件,并且可以防止对静态资源的请求阻塞上游服务器进程。这显着提高了后端服务器的整体性能。

6.Nginx是一个高效的负载均衡器

为了实现现代 Web 应用程序的高性能和正常运行时间,可能需要在单个或分布式 HTTP 服务器上运行多个应用程序实例。这可能需要设置负载平衡以在 HTTP 服务器之间分配负载。

如今,负载平衡已成为跨多个应用程序实例优化操作系统资源利用率、最大化灵活性、减少延迟、提高吞吐量、实现冗余和建立容错配置的广泛使用的方法。

Nginx 使用以下负载均衡方法:

  • 循环(默认方法)– 对上游服务器的请求以循环方式分发(按照上游池中服务器列表的顺序)。
  • 最少连接 – 此处下一个请求将被代理到活动连接数最少的服务器。
  • ip-hash – 这里使用哈希函数来确定应该为下一个请求选择哪个服务器(基于客户端的 IP 地址)。
  • 通用哈希 – 在此方法下,系统管理员使用给定文本、请求或运行时的变量或其组合指定哈希(或密钥)。例如,密钥可以是源 IP 和端口或 URI。然后,Nginx 通过为当前请求生成哈希并将其放置在上游服务器上,在上游服务器之间分配负载。
  • 最少时间 (Nginx Plus) – 将下一个请求分配给当前连接数最少的上游服务器,但优先考虑平均响应时间最低的服务器。

7.Nginx 具有高度可扩展性

此外,Nginx 是高度可扩展的现代 Web 应用程序,尤其是企业应用程序需要提供高性能和可扩展性的技术。

CloudFlare 是受益于 Nginx 令人惊叹的可扩展性功能的一家公司,据 Matthew Prince 称,该公司已成功扩展其 Web 应用程序,以相对适度的基础设施处理每月超过 150 亿的页面浏览量。,CloudFare 联合创始人兼首席执行官。

如需更全面的解释,请查看 Nginx 博客上的这篇文章:NGINX vs. Apache:我们对十年前问题的看法。

结论

ApacheNginx都不能互相替代,它们都有各自的优点和缺点。然而,Nginx 提供了强大、灵活、可扩展且安全的技术,可以可靠、高效地为现代网站和 Web 应用程序提供支持。你的看法是什么?通过下面的反馈表让我们知道。