web服务器nginx和apache的对比分析

     今天准备较详细的对比一下apache httpd与nginx两个web服务器的异同点、优缺点。因为我并非作web开发的,因此有什么理解错误还请指出,想要了解它们是由于工做中有时候会用到它,有系统中用到了nginx+apache。本文绝大多数资料都是摘抄网上,本身作的只就是整合网上零散的资源而后加上本身的一点看法。简单的说apache httpd和nginx都是web服务器,但二者适应的场景不一样,也就是二者专一于解决不一样的问题。apache httpd:稳定、对动态请求处理强,但同时高并发时性能较弱,耗费资源多。nginx:高并发处理能力强、擅长处理静态请求、反向代理、均衡负载。在 这篇文章详细列出了apache与nginx的13个异同点,下面咱们来一一分析其原理。

         一、nginx相对于apache的优势: 轻量级,一样起web 服务,比apache 占用更少的内存及资源 ,抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能,高度模块化的设计,编写模块相对简单 ,社区活跃,各类高性能模块出品迅速啊php

apache 相对于nginx 的优势: rewrite ,比nginx 的rewrite 强大 ,模块超多,基本想到的均可以找到 少bug ,nginx 的bug 相对较多 超稳定。存在就是理由,通常来讲,须要性能的web 服务,用nginx 。若是不须要性能只求稳定,那就apache 吧。后者的各类功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并非全部的状况下都是epoll 大获全胜的,若是自己提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。固然,这只是根据网络IO 模型的原理做的一个假设,真正的应用仍是须要实测了再说的。html

##对于网络IO复用模型,我本身也不懂,可是参考百度百科对epoll解释的:epoll是Linux下多路复用IO接口select/poll的加强版本,它能显著提升程序在大量并发链接中只有少许活跃的状况下的系统CPU利用率,由于它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件以前都必须从新准备要被侦听的文件描述符集合,另外一点缘由就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就好了。从这点能够看出,nginx采用的epoll比select在算法理论上是更高效(为何是理论上,我举个例子,对一个O(N)与O(N^2)的算法,若是要处理的数据规模是1或是不多,这二者能体现出效率差异吗?)另一个就是select IO模型对每一个进程打开的文件描述符有限制,因此我才这个也是影响apache高并发时性能的一个因素。前端

        二、做为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发链接,体现更高的效率,这点使 Nginx 尤为受到虚拟主机提供商的欢迎。在高链接并发的状况下,Nginx是Apache服务器不错的替代品: Nginx在美国是作虚拟主机生意的老板们常常选择的软件平台之一. 可以支持高达 50,000 个并发链接数的响应, 感谢Nginx为咱们选择了 epoll and kqueue 做为开发模型.Nginx做为负载均衡服务器: Nginx 既能够在内部直接支持 Rails 和 PHP 程序对外进行服务, 也能够支持做为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不管是系统资源开销仍是CPU使用效率都比 Perlbal 要好不少.做为邮件代理服务器: Nginx 同时也是一个很是优秀的邮件代理服务器(最先开发这个产品的目的之一也是做为邮件代理服务器), Last.fm 描述了成功而且美妙的使用经验.Nginx 是一个安装很是的简单 , 配置文件很是简洁(还可以支持perl语法), Bugs 很是少的服务器: Nginx 启动特别容易, 而且几乎能够作到7*24不间断运行,即便运行数个月也不须要从新启动. 你还可以不间断服务的状况下进行软件版本的升级 .nginx

##nginx比apache支持更高的并发链接,效率更高,这与前面第一点说的有很大因素,二者网络IO模型不一样,另外一个就是nginx是异步处理请求,而apache是同步处理,每一个进程对应一个请求。关于apache利用每一个进程对应一个请求的的缺点后面还会讨论到。git

        三、Nginx 配置简洁, Apache 复杂 ,Nginx 静态处理性能比 Apache 高 3倍以上 ,Apache 对 PHP 支持比较简单,Nginx 须要配合其余后端用 ,Apache 的组件比 Nginx 多 ,如今 Nginx 才是 Web 服务器的首选github

##Nginx对动态处理请求弱,这个我想与它自己的实现有关吧,它须要与其余模块结合才能支持PHP等语言,而Apache则支持得较好,若是找到了底层实现的根本缘由,欢迎留言指导~web

        四、最核心的区别在于apache是同步多进程模型,一个链接对应一个进程;nginx是异步的,多个链接(万级别)能够对应一个进程算法

##二者处理请求的模型不一样,直接致使了两点:a>nginx的抗并发能力强不少. b>nginx对资源需求更少,因为apache进程与请求与一一对应,在请求很大时资源需求是很大的,并且进程建立销毁代价都很大的。不过如今好像作了改进,prefork能够根据需求预建立一些进行进程,这个有点相似线程池的概念。apache

        五、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有不少丰富的特性.因此还须要搭配着来.固然若是能肯定nginx就适合需求,那么使用nginx会是更经济的方式.后端

##这个应该与前面说的几点都有关系:nginx采用epoll IO复用模型;异步处理请求;线程与请求是一对多关系。

        六、从我的过往的使用状况来看,nginx的负载能力比apache高不少。最新的服务器也改用nginx了。并且nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会很是当心翼翼如今看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。

##在这点里面,咱们主要关注这点:nginx+apache结合使用。既然二者各有优点,那咱们就扬长避短,nginx作前端负责进行抗并发、负载均衡、作静态文件缓存,后端采用apache处理动态请求。

       七、nginx处理动态请求是鸡肋,通常动态请求要apache去作,nginx只适合静态和反向。

##nginx处理动态请求是鸡肋的缘由谁能从原理方面帮解释一下?是否是因为对PHP这种语言支持不够好?对nginx适合作的就是静态请求和反向代理,反向代理是什么东东?简单的说是客户端将这nginx服务器就做为本身的目标机器,将请求发给nginx机器,至于nginx机器是将客户端须要的资源从哪里得到,客户端不在乎(这就有区别与正向代理,在正向代理中是我不能访问目标机器,由于我将请求发给你代理机器,而后以你的名义去得到我须要的资源)。

        八、從我個人的經驗來看,nginx是很不錯的前端服務器,負載性能很好,在老奔上開nginx,用webbench模擬10000個靜態文件請求绝不吃力。apache對php等語言的支持很好,此外apache有強大的支持網路,發展時間相對nginx更久,bug少可是apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx作前端,後端用apache。大型網站建議用nginx自代的集群功能

## 这个仍是在说nginx+apache结合是一个不错的选择。

        九、Nginx优于apache的主要两点:1.Nginx自己就是一个反向代理服务器 2.Nginx支持7层负载均衡;其余的固然,Nginx可能会比apache支持更高的并发,可是根据NetCraft的统计,2011年4月的统计数据,Apache依然占有62.71%,而Nginx是7.35%,所以总得来讲,Aapche依然是大部分公司的首先,由于其成熟的技术和开发社区已经也是很是不错的性能。

##apache早出现,当初人们没选择,何况小压力的网址也用apache就足够应付请求压力,因此二者市场占有率是有差距的。

        十、你对web server的需求决定你的选择。大部分状况下nginx都优于APACHE,好比说静态文件处理、PHP-CGI的支持、反向代理功能、前端Cache、维持链接等等。在Apache+PHP(prefork)模式下,若是PHP处理慢或者前端压力很大的状况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。

##apache的缺陷,抗压不行,且因为线程数飙升,资源需求量也是极大

        十一、能够看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物
##...

        十二、对于nginx,我喜欢它配置文件写的很简洁,正则配置让不少事情变得简单运行效率高,占用资源少,代理功能强大,很适合作前端响应服务器

##看了一下,nginx的配置文件确实更简洁,也容易理解

        1三、Apache在处理动态有优点,Nginx并发性比较好,CPU内存占用低,若是rewrite频繁,那仍是Apache吧
##rewrite这点不是很了解,很少说

上面这13点都是出自网上一篇apache与nginx的对比文章,"##"后面的部分是根据本身的理解进行了简单的分析,但愿对于刚接触apahce和nginx的人有必定的帮助。使用一个产品不能糊里糊涂的使用,咱们须要了解其优势和缺点,这样才能更好的使用它们。 

参考文章:

1. http://www.phpzixue.cn/detail1174.shtml nginx与apache的对比
2. http://blog.csdn.net/hzcyclone/article/details/7464092 nginx做为反向代理实现均衡负载的小例子
3. http://www.oschina.net/question/17_1542为何要结合nginx和apache进行优化的小例子
4. http://baike.baidu.com/view/1385104.htm epoll IO复用模型
5. http://baike.baidu.com/view/1952900.htm fork是什么?

原文连接:http://blog.csdn.net/zbszhangbosen/article/details/7982402

相关文章
相关标签/搜索