如何选择 Apache 或 Nginx Web 服务器?
Web服务器市场上有很多产品,最常见、最具代表性的有Apache、Nginx和微软IIS。本文的目的是比较 Apache 和 Nginx,以帮助用户选择适合他们的 Web 服务器。
1。简介
Apache:
Apache 创建于 1995 年,自 1999 年以来一直在 Apache 软件基金会下开发。 Apache 灵活、功能强大、附加组件丰富,并拥有活跃的社区支持,使其成为世界上最常见的开源和免费 Web 服务器软件。
Nginx:
Nginx 是由俄罗斯软件工程师 Igor Sysoev 编写的免费开源 Web 服务器。 nginx 自 2004 年推出以来,一直专注于高性能、高并发和低内存占用。而负载均衡、缓存、访问和带宽控制以及与各种应用程序的高效集成也逐渐受到用户的欢迎。
以下为2017年11月更新的Web服务器市场份额对比图:
![]()
数据来源:https://news.netcraft.com/archives/2017/11/21/november-2017-web-server- Survey.html
2。比较
虽然Apache和Nginx有着相同的背景,但它们的功能和用途是相同的。简单来说,它们接收用户请求,然后处理请求,最后将处理结果返回给用户。
01。链接管理
Apache 和 Nginx 最大的区别在于链接的处理方式。 Apache 提供了一组多处理模块,通过这些模块可以使用操作系统资源、管理进程和线程池以及控制和处理用户请求。
Apache 提供了三个多处理器模块:mpm_prefork、mpm_worker 和 mpm_envent。下面简单解释和比较。
mpm_prefork:模块生成很多子进程,每个子进程都是单线程的,每个线程连接一个请求,这样一对一的连接。因此,如果请求数大于进程数,服务器的性能就不会令人满意。
![]()
mpm_worker:与prefork不同,worker子进程是多线程的,每个线程处理一个用户连接。线程数大于进程数,这意味着新连接可以立即获得空闲线程,而无需等待进程变得空闲。
![]()
mpm_event:该模块与worker类似。不同的是,事件可以处理长连接(keep-alive),因此可以避免线程长时间忙于请求而浪费资源。还提升了高并发场景下的请求处理能力。
![]()
与 Apache 不同,Nginx 以异步、非阻塞、事件驱动的方式实现。 Nginx工作进程是单线程的,每个线程可以异步处理大量的用户请求。以下是Nginx的工作原理:
![]()
图片来源:http://www.aosabook.org/en/nginx.html
02。处理静态和动态内容
无论是静态还是动态内容,一切都可以由Apache处理,它内置了解析和执行多种动态脚本语言(例如PHP、Python和Perl)的功能。 )无需外部处理器。
毫无疑问,动态内容处理可能是 Nginx 的痛点。 Nginx 在处理动态内容时效率低下,需要外部处理器的帮助。因此,如果您的网站有很多动态功能,您可能会更喜欢 Apache 的性能。虽然与 Apache 相比,Nginx 的动态内容处理能力较差,但其静态内容处理仍然非常高效。
3。总结
Apache模块组件支持丰富,稳定性强,BUG少,动态内容处理能力强。
Nginx轻量级、占用资源少、负载均衡、功能强大、大并发处理、高效的静态内容处理。
存在是有意义的。 Apache 和 Nginx 作为 WEB 服务各有优势。就我个人而言,我不认为其中之一会在未来完全取代另一个。关键是用户要仔细考虑自己的应用场景,根据自己的需求和情况来决定选择哪种产品。最适合他们的。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网