NGINX与Apache有什么区别?当今为 Internet 提供动力的两个最流行的开源 Web 服务器 ( Source )是 Apache HTTP 服务器和 NGINX。世界上超过 50% 的网站运行在这两个 Web 服务器上。近二十年来,Apache Web 服务器为全球大约 60% 的网站提供服务,直到其竞争对手 NGINX(发音为“engine-x”)问世。由于数据流量和万维网用户数量的爆炸式增长,引入了NGINX以克服Apache Web服务器的性能限制。NGINX 专为更高的并发性而设计,可以部署为独立的 Web 服务器,也可以部署为 Apache 和其他 Web 服务器的前端代理。本文为你详细介绍NGINX与Apache差异比较,看看哪一个更好。
Apache是什么?
Apache 旨在提供可通过 Internet 访问的 Web 内容。值得注意的是,它在万维网的初始增长中发挥了关键作用。Apache 是一种开源软件,由开放的开发人员社区开发和维护,可在各种操作系统上运行。该架构包括 Apache 核心和模块。核心组件提供类似服务器的基本功能,因此它接受连接并管理并发。各种模块对应于对每个请求执行的不同功能。可以将特定的 Apache 部署配置为包括不同的模块,例如安全功能、动态内容管理或基本 HTTP 请求处理。
“一机多能”模式是 Apache 早期成功的关键。然而,随着流量水平的增加和网页变得更加丰富以及性能成为一个限制,调整 Apache 以应对现实世界的流量变得复杂。
什么是NGINX ?
NGINX是专门为解决 Apache Web 服务器的性能限制而编写的。NGINX 的性能和可扩展性源于其事件驱动架构。它与Apache 的process-or-thread-per-connection 方法有很大不同。在 NGINX 中,每个工作进程可以同时处理数千个 HTTP 连接。因此,NGINX 是一种轻量级、可扩展和高性能的实现。这种架构使得处理高波动数据负载在 RAM 使用率、CPU 使用率和延迟方面更加可预测。
NGINX 还具有丰富的功能集,可以执行各种服务器角色:
- 用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议的反向代理服务器
- 负载均衡器和 HTTP 缓存
- Apache和其他Web服务器的前端代理,结合了Apache的灵活性和NGINX良好的静态内容性能
NGINX与Apache有什么区别
1. 简单
在 Apache 上开发和创新应用程序很容易。在一个连接每个进程模型使得它很容易在它的网络服务逻辑的任意位置插入模块。开发人员可以以这样的方式添加代码,如果出现故障,只有运行代码的工作进程会受到影响。所有其他连接的处理将继续不受干扰。
另一方面,NGINX 具有复杂的架构,因此开发模块并不容易。NGINX 模块开发人员需要非常小心地创建高效准确的代码,没有任何故障,并与复杂的事件驱动内核进行适当的交互以避免阻塞操作。
2. 性能
性能是通过服务器如何向客户端浏览器传送大量内容来衡量的,这是一个重要因素。内容可以是静态的或动态的。
让我们看看这方面的一些统计数据。
2.1. 静态内容
NGINX与Apache差异比较:根据通过运行多达 1,000 个同时连接执行的基准测试,NGINX 的执行速度是 Apache 的 2.5 倍。另一个运行 512 个并发连接的基准测试表明,NGINX 的速度大约是其两倍,并且消耗的内存更少。毫无疑问,NGINX 在静态内容方面比 Apache 更有优势。因此,如果你需要提供并发静态内容,NGINX 是首选。
2.3. 动态内容
对于显示动态内容,Speedemy 的基准测试结果显示,两者的 Nginx 与 apache 性能完全相同。一个可能的原因是,几乎所有的请求处理时间都花在 PHP 运行时环境中,而不是 Web 服务器的核心部分。在PHP运行环境是非常相似,两者的Web服务器。
Apache 还可以通过将 PHP 等语言的处理器嵌入到其每个工作实例中来处理动态内容。这允许它在 Web 服务器本身内执行动态内容,而无需依赖外部组件。这些动态处理器可以通过使用可动态加载的模块来启用。
NGINX 没有任何本地处理动态内容的能力。为了处理 PHP 和其他对动态内容的请求,NGINX 必须传递给外部处理器执行并等待渲染的内容被发回。但是,这种方法也有一些优点。由于动态解释器没有嵌入到工作进程中,所以它的开销只会出现在动态内容中。
3. 操作系统支持
Apache 可在所有操作系统上运行,例如 UNIX、Linux 或 BSD,并且完全支持 Microsoft Windows。NGINX 也运行在几个现代的类 Unix 系统上,并支持 Windows,但它在 Windows 上的性能不如在 UNIX 平台上稳定。
4. 安全
Apache 和 NGINX 都是安全的 Web 服务器。Apache 安全团队的存在是为了向 Apache 项目提供有关安全问题的帮助和建议,并协调处理安全漏洞。正确配置服务器并了解设置中的每个选项的作用非常重要。有许多指导方针可以保护服务器以防止安全攻击。
5. 灵活性
可以通过添加模块来定制 Web 服务器。Apache 已经有最长时间的动态模块加载,所以所有的 Apache 模块都支持这一点。
NGINX Plus(NGINX Plus 是一个构建在开源 NGINX 之上的软件负载均衡器、Web 服务器和内容缓存)也使用模块化架构。新特性和功能可以通过软件模块添加,这些模块可以按需插入到正在运行的 NGINX Plus 实例中。动态模块为 NGINX Plus 添加了功能,例如通过 IP 地址定位用户、调整图像大小以及将 Lua 脚本嵌入到 NGINX Plus 事件处理模型中。模块由 NGINX, Inc. 和第三方开发人员创建。
大多数必要的核心模块功能(例如,代理、缓存、负载平衡)都由两个 Web 服务器支持。
6. 支持和文档
NGINX与Apache有什么区别?需要考虑的一个主要问题是对 Web 服务器以及其他软件的可用帮助和支持。由于 Apache 已经流行了很长时间,因此对服务器的支持相当普遍。有一个大型的第一方和第三方文档库可用于核心服务器和基于任务的场景,包括将 Apache 与其他软件连接起来。
除了文档,许多工具和 Web 项目还包括在 Apache 环境中自举的工具。这可能包含在项目本身中,或者包含在你的发行版的打包团队维护的包中。
一般来说,Apache 得到了更多第三方项目的支持,这仅仅是因为它的市场份额和可用的时间长短。
对于 NGINX,过去由于大部分早期开发和文档都是俄语,因此很难找到全面的英文文档。然而,今天文档已经填写完毕,现在 NGINX 站点上有大量管理资源和第三方可用的文档。
NGINX与Apache差异比较
总而言之,这是 Nginx 与 Apache 之间功能集的表格视图:
特征 | Apache | NGINX |
简单 | 由于其每个进程一个连接的模型,易于开发和创新 | 开发复杂,因为它具有复杂的架构来同时处理多个连接。 |
性能 – 静态内容 | 显示静态内容缓慢 | 比 Apache 快 2.5 倍,消耗更少的内存 |
性能 – 动态内容 | 动态内容的出色表现 | 动态内容的出色表现 |
操作系统支持 | 支持所有操作系统 - 类 Unix 和 Windows | 支持所有操作系统 - 类 Unix 和 Windows,但在 Windows 上的性能相对不太稳定。 |
安全 | 是一个安全的网络服务器。了解和配置安全功能很重要 | 是一个安全的网络服务器。了解和配置安全功能很重要 |
灵活性 | 可以通过添加模块来定制。Apache 的动态模块加载时间最长。 | NGINX 1.11.5 版和NGINX Plus Release R11引入了对动态模块的兼容性。 |
支持和文档 | 由于它已经在市场上存在很长时间,因此可以获得出色的支持和文档。 | 尽管 NGINX 的支持和文档起步较弱,但它发展迅速,因此现在拥有出色的资源支持和文档可用。 |
NGINX 和 Apache – 一起工作
对于许多应用程序,NGINX 和 Apache 相得益彰。一个非常常见的启动模式是在基于 Apache 的 Web 应用程序前面部署开源 NGINX 软件作为代理(或NGINX Plus作为应用程序交付平台)。NGINX 执行与 HTTP 相关的繁重工作——提供静态文件、缓存内容和卸载慢速 HTTP 连接——以便 Apache 服务器可以在安全可靠的环境中运行应用程序代码。
NGINX与Apache差异比较结论
正如所见,Apache 和 NGINX 都强大、灵活且功能强大。这两款服务器的最新版本在所有领域都具有竞争力。决定哪种服务器最适合你在很大程度上取决于评估你的特定要求并决定最佳选项。