Web服务器是直接影响网站性能的关键因素,也是每个站长在选择网站运行环境时必须考虑的问题。目前Web服务器市场上的产品很多,最主流和最具代表性的是Apache、Nginx和微软的IIS。本文的目的是比较Apache和Nginx,以帮助用户选择适合自己的Web服务器。1、Apache简介:Apache成立于1995年,1999年起在Apache软件基金会下发展。Apache灵活、高效、丰富的扩展模块、活跃的社区支持,已成为最主流的开源和免费网络世界上的服务器软件。Nginx:Nginx是由俄罗斯软件工程师IgorSysoev编写的免费开源Web服务器。nginx自2004年推出以来,一直专注于高性能、高并发和低内存占用。而其在负载均衡、缓存、访问和带宽控制等方面的特性,以及与各种应用程序的高效集成,使其逐渐受到用户的青睐。以下是2017年11月更新的Web服务器市场份额对比图:数据来源:https://news.netcraft.com/archives/2017/11/21/november-2017-web-server-survey.html2.虽然比较Apache和Nginx有不同的背景,但是他们的目的是一样的。简单来说就是接收用户请求,然后处理请求,最后将处理结果返回给用户。01.链接处理Apache和Nginx***的区别在于它们处理连接的方式。Apache提供了一系列的多处理模块,通过它们使用操作系统的资源,管理进程和线程池,控制用户请求的处理。Apache提供了三个多处理模块:mpm_prefork、mpm_worker和mpm_envent。下面我们做一个简单的描述和比较。mpm_prefork:模块生成很多子进程,每个子进程都是单线程的,每个线程链接一个请求,这样的一对一关系。所以如果请求数大于进程数,服务器的性能就会差强人意。mpm_worker:与prefork不同,worker中的子进程是多线程的,每个线程管理一个用户连接。线程数大于进程数,这意味着新的连接可以立即获得一个空闲线程,而不用等待进程空闲。mpm_event:该模块与worker类似,不同的是event可以处理长连接(keep-alive),避免request长期占用线程造成的资源浪费,同时也增强了high-request的处理能力并发场景。与Apache不同,Nginx是以异步、非阻塞、事件驱动的方式实现的。Nginx的工作进程是单线程的,每个线程可以异步处理大量的用户请求。下面是Nginx的工作原理图:图片来源:http://www.aosabook.org/en/nginx.html02。静态和动态内容的处理无论是静态内容还是动态内容,Apache都能处理,Apache内置了各种动态脚本语言(包括PHP、Python和Perl)的分析和执行功能,无需借助外部处理器.毫无疑问,动态内容处理很可能是Nginx的痛点。Nginx在处理动态内容方面效率不高,需要外部处理器。所以如果你的站点有很多动态特性,Apache的性能可能更适合你。不过,虽然Nginx的动态内容处理能力与Apache相比不尽如人意,但其处理静态内容的效率还是非常高的。3、总结Apache模块组件支持丰富,稳定性强,BUG少,动态内容处理能力强。Nginx轻量级,占用资源少,负载均衡,高并发处理,静态内容处理高效。存在是有意义的。Apache和Nginx作为WEB服务各有所长。我个人认为两者不存在,未来谁会完全取代对方。关键是用户要慎重考虑自己的应用场景,根据自己的需求和情况来决定选择哪种产品。适合自己的才是最好的。
