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

根据Netcraft在2017年底进行的网络服务器调查,Apache和Nginx是使用最广泛的Web服务器

Netcraft公司最新的网络服务器调查显示,截至2017年底(正好在11月份),Apache和Nginx是互联网上应用最广泛的开源Web服务器。

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

自从推出以来, Apache自1996年以来一直是互联网上最流行的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等等

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

2. Nginx为高并发性而设计

与Apache面向线程或面向流程的体系结构(每个连接的进程或每个连接的线程模型)相反, Nginx使用可伸缩的事件驱动(异步)体系结构。 它采用了可用的硬件资源量身定制的流程模型。

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

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

这使得它的操作可扩展,并导致高性能。 这种设计方法进一步加快了现代应用的速度。 另外,第三方模块可以用来扩展Nginx的本地功能。

3. Nginx易于配置

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

块指令由大括号( {} )定义。 如果一个block指令在大括号内可以有其他的指令,它就被称为诸如事件,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联合创始人兼首席执行官Matthew Prince透露,一家受益于Nginx令人惊叹的可扩展性功能的公司CloudFlare ,已经成功地扩展了它的Web应用程序,以相对较低的基础设施处理每月超过150亿的页面浏览量。

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

结论

ApacheNginx都不能互相取代,他们各有千秋。 然而, Nginx提供了一个功能强大,灵活,可扩展和安全的技术,可靠,高效地为现代化的网站和Web应用程序提供支持。 你拿什么? 请通过下面的反馈表告诉我们。