Apache 是一个开源 HTTP 服务器,而 Nginx 是一个开源、高性能异步 Web 服务器和反向代理服务器。
Apache 中的错误修复、支持、维护和应用程序开发由来自世界各地的用户社区管理和维护,并由 Apache 软件基金会协调,而 Nginx 由一家成立于 2011 年的同名公司负责。
两者之间的主要区别在于它们处理客户端请求的方式。虽然 Apache 提供了各种不同的多处理模块来处理客户端请求和网络流量,但 Nginx 旨在以最少的硬件资源同时处理多个客户端请求。
在Apache中,单线程只关联一个连接,而Nginx中的一个线程可以处理多个连接。所有进程都与其他连接一起放在一个事件循环中,并进行异步管理。此过程消耗更少的内存,从而提高性能。
Apache HTTP 服务器采用多线程架构,缺乏可扩展性。而 Nginx 遵循异步事件驱动的方法来处理多个客户端请求。其事件驱动的架构旨在即使在交通繁忙的情况下也能提高性能。
Apache 服务器使用传统方法提供静态内容,并在 Web 服务器本身内部处理动态内容。 Nginx,另一方面,不能在内部处理动态内容。它依赖于外部进程来执行。
Apache | Nginx |
Apache 可在所有类 Unix 系统上运行,例如 Linux、BSD 等,并且完全支持 Windows。 | Nginx 在现代类 Unix 系统上运行;但是它对 Windows 的支持有限。 |
Apache 使用多线程方法来处理客户端请求。 | Nginx 遵循事件驱动的方法来处理客户端请求。 |
Apache 无法同时处理大量网络流量的多个请求。 | Nginx 可以在有限的硬件资源下同时高效地处理多个客户端请求。 |
Apache 在 Web 服务器本身内处理动态内容。 | Nginx 本身无法处理动态内容。 |
Apache 旨在成为网络服务器。 | Nginx 既是 Web 服务器又是代理服务器。 |
动态加载或卸载模块,使其更加灵活。 | 由于模块不能动态加载,它们必须在核心软件本身内编译。 |
一个线程只能处理一个连接。 | 一个线程可以处理多个连接。 |
Apache 对于静态内容的性能低于 Nginx。 | Nginx 可以同时运行数千个静态内容的连接,速度是 Apache 的两倍,而且使用的内存更少。 |