Nginx与httpd对比

为促进社区发展,运维派寻求战略合作、赞助、投资,请联系微信:helloywp

作为一个运维的学习者,对nginx和apache了解的很浅,但是作为以后运维过程中非常重要的两款服务器软件,静态web服务提供者,还是相当有必要深入的了解一下他们俩个的区别。

那么,我开始尝试从几个方面来分析他们的区别之处。所有的观点都为本人持有,一家之言而已。

生存环境(操作系统)、不同的地域的使用情况、存在或者一般使用者的规模、主要作用、源代码情况(如果有时间的话)、使用亲民度、对php等的支持。

下面开始我的菜鸟学习之路

一、生存环境

各类种子的发育离不开肥沃的土壤,同样,谈到应用程序,我们不得不提到的就是操作系统环境,毕竟不同系统对他们的影响还是不小的

apache 这个老牌了,在几乎任何系统下都有对应的支持,无论时Windows还是Linux还是其他系统,都有支持

它的官网:http://httpd.apache.org/

截至目前,最新版本是2.4.20,可见官网下载可以直接获得Win以及NetWare的二进制安装包,而Linux需要自行编译使用(当然使用源最好)

nginx也一样,官网http://www.nginx.org/,又卡又慢,给人一种很不好的印象(httpd也不快),截至目前,最新版为1.10.0。

进入下载页面,可以发现,nginx只提供Linux相关源码和Windows版本,没有其他的支持,搜索一番,Windows下Nginx的相关信息寥寥无几

所以总结说Windows下Apache占用率使用率是霸主地位的,Linux两者尚不知晓

顺便借鉴一下前人的经验,各种测试各种评测,很明确的OS区别就是,
Apache 在Linux下的(LAMP)效率远超过在同样硬件配置的Windows Server下(Linux大法好 ,嘿嘿)

二、使用地域

实话说我并不知道中国与外国在服务器使用上有何区别,由于我的梦想是在中国当运维,所以外国怎么样对我也不重要。

听说中国的运维技术,远超过外国普通公司(淘宝在线人数峰值),所以或许关注中国是对的。。。
那么就贴一个图

Nginx

2015年中旬左右的服务器市场占有率,可以看到,nginx对比apache还是要低上不少的。至于微软的为啥那么多?呵呵,不是所有开网站的都会用Linux的。。。

老牌apache还是占有了大部分市场,我们可以通过随便看看各种网站,看他们提供Web服务的时候,使用的都是什么服务器

  • netcraft

Nginx

使用的是apache

  • Hit官网

Nginx

使用的是Unix下的apache(不愧是学校,就是有钱)

  • 电工实验室

Nginx

Microsoft无疑

  • PSN中文站点

httpd

明显是nginx了

很多网站在出现404时,下端就是一个nginx,懒得列出来了,随便在网址后面加点东西就出来了。

可以看到,两者在单服务器情况下似乎是apache更多一些的。

三、规模和功能

把两个结合到一起说了,因为我发现他们两个的存在是不冲突的。

Nginx除了静态页面服务以外,反向代理负载均衡功能也是为人所称道,上万的并发访问一肩挑,堪称性能之王。

apache出道多年,无与伦比的稳定性,广为人周知,配置简单,后端结合紧密,性能可以接受,很快成为了Web服务的主流。

嗯,这是我从必应搜来的博客,我分析做出的总结。nginx性能,apache稳定,很多人的共识,我也不知道到底对不对

一般来说,一个服务器集群,Web服务提供集群,是nginx前面抗压力+负载均衡,后面apache提供真正的网页服务的,所以,两个哥们可以说是缺一不可。

前面的使用率抽查就已经看出了一个问题,更多网站以apache当做Web服务提供者,可能架构就是我上面所说的那种nginx反向代理,然后apache提供网页内容的样子,由于学识、认知的匮乏,我不能看出网站到底使用的样子的什么架构,也不能看出他们到底是不是nginx当做的负载均衡调度。这个问题暂时就无解了。

于是,通过在群里的聊天,偶尔翻看网友的博文,参考马帮同学们给出的他们的结构图,绝大部分都是符合我的猜测的。

就是这样,至于为什么大众化的网站(尤其是简单网站)不愿意把nginx当做直接的Web提供者,有待观察。

四、与php的交互,使用亲民度

恩,这个问题,我感觉就回答了上一个模块提出的疑问:为啥大众化的东西,更愿意用apache呢?

我对答案的形容,和我猜测的答案本身,是同一个词:简单。

没错,我的猜测就是,简单粗暴,导致了这样的情况出现。

也许我们会考虑到某些网上流传的说法,例如:nginx的rewrite功能不如apache强大啦,nginx的bug很多啦,什么什么的。要我说,无稽之谈,强行借口而已。

不够强大,那说明它本身也是有,只不过相对而言略显单薄(虽然是否真的单薄都不知道)而已,对于大众化的网站来说,足够了。

Bug多,这个我是真心不认同,nginx搜索结果,可以说是好评如潮,大家都对这个可靠又轻量化的软件极尽夸耀之能事,nginx的commuity讨论页面,大家反馈的错误也多半是自己不会配置的结果。

况且,intel、索尼PSN官网、某人气论坛等,这类的网站尚且在使用nginx当做Web服务器,如果BUG真的多,难道他们身经百战的运维大师会不知道?还有,只是当做一个普通的网站而已,又不是99.999%的高可用,想那么多不累吗?

当然,一切都是我妄加揣测而已,或许是我在表达着一堆狂妄无知的言论,哈哈~

所以说,这个问题就很简单了,nginx不是不行,那不流行的原因,一个是apache实在出名,另一个,就是它配置繁琐墨迹啦,难度略高啦~

PHP:
被誉为世界上最好的编程语言,(个人认为这个殊荣应该由C语言获得)
实则是一个流行的网页编程语言,由于它简单,类C,性能可以接受,难度低,普通程序员可以轻松适应,所以十分受中小型网站欢迎(论坛,基本没有PHP以外的)Phpwind、discuz、phpbb等等,一个个著名又免费开源的论坛程序造就了一部分PHP的辉煌。

Apache与nginx都是静态页面提供,没有动态页面提供的能力,那么他们必然要配合php一起来使用。 它与PHP交互的能力,自然就成了一个衡量它的便民性的重要指标。

Apache不用多说,yum/dnf install 或者apt-get install 轻轻松松拿下,配置文件随便改改就可以自由运行了,简直就是“诺手收残血”,痛快利索。
Nginx。。。问题的答案出来了,fastcgi吧兄弟。根据我的调查,大部分的学员在第一次配置fastcgi的时候,都遇到了或多或少的问题。我当时就是因为参数传递的问题,纠结了好久。

一个方便省事,安全可靠,资料感人(汉化程度),支持广泛的apache+php,还有一个配置墨迹,资料近乎全外文的nginx+fastCGI,刚开始还未必能搞好。
如果只是建立一个普通的网站,没有时时刻刻在线的严苛要求,没有百万流量的均衡需求,没有宕机半小时7位数损失的风险,你会选择哪一个?

(这里其实我漏掉了很多问题,比如tomcat这种软件,我不清楚它与apache httpd两者之间有什么PY,啊不,有什么功能关系。。。)
(据我所知,servlet是需要在tomcat下运行的,但是tomcat貌似是可以独立存在的,所以我也不敢乱说,等以后学完了再来补充一波啦)

最后找时间来说说源代码的问题~先到这里吧。

简单的看一眼源代码吧,我相信80%左右的人都不会去翻看apache或者Nginx 提供的源代码,估计大部分就是因为没必要吧。

不过一旦有了更改nginx,优化等等的需求,就需要去修改源代码了,简简单单的C语言对于我这种玩过驱动开发的人来说轻轻松松。

简单看下nginx 的,源代码都放在src文件夹中

httpd

命名规范,作用一清二楚,随便进入CORE看看nginx.c(应该是最核心的文件了)

httpd

代码还是比较清晰明了的,这段截取的代码,可以看出这是程序跑起来的时候获取参数的基本函数,为方便也是写成了静态。

相比之下,apache的代码看起来老套了很多,有些甚至是上世纪流传下来的,注释日期早的吓人(笑)

因为没有时间通看一遍的原因,并没能分析出两者架构的区别,是什么导致Nginx轻量的多?不过Nginx这种及其严格清晰层次分明的代码树,确实让我十分佩服。感觉apache就稍显混沌了。

总结:

终于到了这个环节,这么长时间的工作也算有了结果。

对于中小型网站来说,nginx还是apache提供服务都没有任何的区别,仅仅是在链接PHP的时候,Nginx略显繁琐,配置不够友好。

当业务量上升到一定层次时,需要集群的出现,Nginx 和apache就都有了自己的作用和位置,两者配合工作,世界就和平了。

没有nginx,只有apache,行不行?目前看来,不行。

没有apache,只有nginx,行不行?好像可以。

还有大量我不了解的知识,等待我去学习,关于两者异同的问题,相信随着我的学识进步也会有更深层次的理解和分析。我没准也会有新的看法,或者颠覆性的认知。

我在进步。我向往未来。

文章出处:马哥Linux运维微信公众号

文:magedu-Derek

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2012-2019 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部