Apache vs Nginx 哪个更好?两大 web server 区别比较

互联网发展到今天,各方面门槛也是越来越越低,从开始的静态网页、虚拟主机、独立VPS到现在流行的云主机,个人都可以独立使用建立自己的博客网站或是中小企业展示网站,但考虑的需求也就增多了,开始网站建设的 web server 如何选择就成了一个问题。

我们知道网站网页本质上是 HTML 文档。为了能够向访问者提供不同的网页,提供服务的机器需要一个 web服务器程序。 Nginx 和 Apache 就是两个提供 Web 服务的的软件程序,Nginx 和 Apache 相互优缺之争由来已久。

Apache 于1995年首次发布,Nginx 于2004年发布。两者都被全球 500强的大型公司使用。Nginx 的市场份额多年来一直在稳定增长。在某些情况下,Nginx 在性能方面更具有竞争优势。

nginx和apache区别

Apache

随着蒂姆伯纳斯李创建了 html,之后 Apache 就占据着 web服务器的主导地位。现在发行的 linux服务器,无论是 redhat 还是 ubuntu,apache 都是默认自带的服务器,因此,很多人都是使用 Apache 来进行 web开发的,毕竟人家操作系统已经给你提供好了。

apache 受欢迎的一个点就是他的 .htacess 文件配置管理。

Apache 使用 .htaccess 进行配置,它为处理传入请求的方式提供了很大的灵活性。不同的重定向规则,最大上传文件大小,URL重写,内存限制,目录保护,header 头信息,cookie,查询字符串操作。

在服务器根目录中,目录树中的每个级别或目录都可以具有自己的 .httaccess 文件,并具有自己的配置。对于共享主机提供商,这是一个梦想,因为他们可以在同一台计算机上为数百个用户提供一种配置其网站服务方式的方式,而不会影响其他网站。客户可以在受限的共享托管环境中配置许多详细信息,而无需接触全局服务器配置。

但是,这种灵活性是以性能为代价的:“无论您实际上是否使用它们,允许 .htaccess 文件都会导致性能下降!”每次启用 .htaccess 文件时,Apache 都必须从请求的 UR L或文件中遍历整个目录树,直到所有的更高级别,直到服务器的根目录,然后针对每个请求加载它们。

apache 还有一个受欢迎的点是他的模块机制。

Apache 便允许用户安装模块,然后根据需要启用/禁用它们。apahce 有很多好用的模块,比如压缩,加密,日志记录,重定向到更高级的内容,例如使用高级语法编辑请求和响应,正是有了这些模块,才让 Apache 处理请求更加多样化。

 

Nginx

Nginx(也称为nginx或NGINX)是在 2004年由俄罗斯开发人员 Igor Sysoev 首次公开发行的。Nginx 是专门为解决 Apache Web 服务器的性能限制而编写的。

Nginx 发布后,主要用于提供静态文件,并在 Apache 安装之前用作负载平衡器或反向代理。 随着网络的发展以及对速度和硬件使用效率的高要求,越来越多的网站开始使用 Nginx 完全替换 Apache,这也要归功于更成熟的软件。

现在市场上 nginx 的份额已经超过了 Apache,很多大公司都开始采用 nginx 作为后端的 web 服务器,有些大公司甚至会修改 nginx 的部分代码来使用,比如我们熟知的 Tengine。nginx 最初设计的时候就是模块化的思想,它的所有功能都是采用模块形式提供的,需要什么功能,只要对应加载相应的模块就可以。

nginx 一直都在全速发展着,目前最新的 web技术 quic 和 http3 也已经在最新版的 nginx 中提供实现了。

缓存

apahce 和 nginx 都提供了缓存功能。apache 有 mod_cache模块,nginx 也有 fastcgi缓存。可以说没有缓存的 web 系统几乎不可能支撑如今高访问的情况。当然说道缓存,最专业的还是 Varnish HTTP。不过因为 nginx 可以和它完美地结合,所以这也是越来越多人拥抱 nginx 的一个理由。

apache 和 nginx 处理请求方式

apache 和 nginx 最大的不同在于它们处理请求的方式。apache 使用 MPM(Multi-Processing-Modules) 处理请求。

早期的 mpm 是 prefork 模块。在这种模式下,Apache 会在每个请求中生成一个线程的新进程。该模块与 mod_php 一起使用,意味着 Apache 服务器在每个进程中都嵌入了一个PHP解释器,虽然可能这个请求只是请求 css等静态文件。这是非常低效的。

在后来的几年中,Apache 开发了多线程工作程序 mpm,之后又开发了事件 mpm。它们都减轻了许多 Apache 的性能问题。切换到 php-fpm 使得 Apache 仍然可以成为当今竞争性的解决方案,并且消除了 .htaccess 的使用,这让 apache 的处理效率提升了很多。

Nginx 使用异步,非阻塞事件来处理请求。

简而言之,Apache 对每个连接都使用进程(对于worker mpm,它使用线程)。随着流量的增加,它很快变得太昂贵了。

事件 mpm 在优化方面更进一步,但是一些测试表明它不能超过 Nginx。尤其是当我们谈论静态文件时,Nginx 的服务量是 Apache 的两倍。

Nginx 理想情况下,每个CPU 内核只有一个工作进程。 Nginx 工作进程的区别在于,每个工作进程可以处理每个工作进程成千上万的传入网络连接。无需为每个连接创建新的线程或进程。

总结

从目前的的发展眼光来看,nginx 的却是比 apache 的性能更优越,而且有越来越多的辅助插件构建在 nginx 上面。

所以,如果你的 web 项目刚起步,建议您选择 nginx 来作为服务器,它可以给你提供更优秀的性能体验,当然,对于中小型项目来说,apahce 稳定相对较少的bug 依然也是不错的选择。特别是它的 .htaccess 确实非常好用。

 

转载请注明链接地址:荐爱小站 » Apache vs Nginx 哪个更好?两大 web server 区别比较

赞 (0) 赏 !

觉得文章有用就打赏一下吧,赠人玫瑰手有余香!

支付宝扫一扫打赏

微信扫一扫打赏