Web服务器是直接影响网站性能的关键因素。这也是每个网站管理员在选择网站运营环境时必须考虑的问题。目前,Web服务器市场上有很多产品。最主流和最具代表性的是Apache,Nginx和Microsoft IIS。本文的目的是比较Apache和Nginx,以帮助用户选择适合他们的Web服务器。
1.简介
阿帕奇:
Apache成立于1995年,自1999年以来一直在Apache Software Foundation下开发.Apache灵活,高效,具有丰富的扩展模块和活跃的社区支持,成为世界上最受欢迎的开源免费Web服务器软件。
nginx的:
Nginx是由俄罗斯软件工程师Igor Sysoev编写的免费开源Web服务器。自2004年推出以来,nginx一直专注于高性能,高并发性和低内存使用。它在负载平衡,缓存,访问和带宽控制以及与各种应用程序的高效集成方面的功能使其逐渐受到用户的欢迎。
以下是2017年11月更新的网络服务器市场份额的比较:
资料来源: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。不同之处在于,当请求线程长期使用时,事件可以处理长期存在以避免浪费资源。它还增强了高并发场景中的请求处理能力。
与Apache不同,Nginx以异步,非阻塞,事件驱动的方式实现。 Nginx的工作进程是单线程的,每个线程都可以异步处理大量用户请求。这是Nginx的工作图:
图像来源:http://www.aosabook.org/en/nginx.html
02.处理静态和动态内容
Apache可以处理静态和动态内容。 Apache具有内置功能,可以解析和执行各种动态脚本语言(包括PHP,Python和Perl),而无需外部处理器。
毫无疑问,动态内容处理可能是Nginx的痛点。 Nginx对动态内容的处理效率不高,需要外部处理器。因此,如果您的站点具有大量动态功能,则Apache的性能可能更具相关性。然而,尽管Nginx的动态内容处理能力不如Apache,但其静态内容处理仍然非常高效。
3.总结
Apache具有丰富的模块组件支持,稳定性强,BUG少,动态内容处理能力强。
Nginx重量轻,占用资源少,负载均衡,并发处理高,静态内容处理效率高。
没有理由存在。 Apache和Nginx作为WEB服务有自己的优势。就个人而言,他们认为将来不会有任何人完全取代他们。关键是用户应该仔细考虑他们的应用场景,并根据自己的需要和情况选择要选择的产品。对他们来说最好的是最好的。