1.两者所用的驱动模式不同。

nginx使用的是epoll的非阻塞模式事件驱动。

apache使用的是select的阻塞模式事件驱动。

2.fastcgi和cgi的区别

当用户请求web服务的时候,web会根据不同的需求将请求发送给不同个cgi来处理。

cgi模式,就是每次有请求的时候都fork一个新的进程来处理这个请求,处理完成后再关闭这个进程。

fastcgi模式,就是在服务器启动的时候根据配置文件建立几个cgi接口进程长驻在内存当中,当有请求连接的时候,cgi被激活来处理请求连接,处理完毕后cgi进程也不会关闭,会再次等待下次的请求连接。

因为进程的创建和关闭需要占用很大的内存和cpu资源,所以,相比较而言,处理多请求的情况下fastcgi模式的优点会不言而喻。

3.两者的支持模块

Apache支持的模块很多,而且也比较稳定。而nginx由于出现的比较晚,所以在这方面可能比不上Apache。

nginx本身就是一个反向代理服务器,而且支持7层负载均衡。

Apache的rewrit功能比nginx强大许多。

nginx是多线程的,而Apache是多进程的。

nginx处理动态页面很鸡肋,一般只用与处理静态页面和反向代理。

Apache由于支持的模块比较多,可以支持比较多的动态页面。而且性能比较稳定。

如果需要性能,就使用nbinx;如果需要稳定,就使用Apache。

以下复制于网络

不断有人跟我说Nginx比Apache好、比Apache快之类。Nginx更主要是作为反向代理,而非WEB服务器使用。我翻译过一本关于反向代理的技术书籍,同时精通Apache API开发,对Nginx和Apache的工作原理都略有了解,粗谈一下看法。
    不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是IO操作,自身并不涉及到复杂计算。反向代理用事件驱动来做,显然更好,一个工作进程就可以run了,没有进程、线程管理的开销,CPU、内存消耗都小。所以Nginx、Squid都是这样做的。当然,Nginx也可以是多进程 + 事件驱动的模式,几个进程跑libevent,不需要Apache那样动辄数百的进程数。Nginx处理静态文件效果也很好,那是因为静态文件本身也是磁盘IO操作,处理过程一样。至于说多少万的并发连接,这个毫无意义。我随手写个网络程序都能处理几万的并发,但如果大部分客户端阻塞在那里,就没什么价值。
    再看看Apache或者Resin这类应用服务器,之所以称他们为应用服务器,是因为他们真的要跑具体的业务应用,如科学计算、图形图像、数据库读写等。它们很可能是CPU密集型的服务,事件驱动并不合适。例如一个计算耗时2秒,那么这2秒就是完全阻塞的,什么event都没用。想想Mysql如果改成事件驱动会怎么样,一个大型的join或sort就会阻塞住所有客户端。这个时候多进程或线程就体现出优势,每个进程各干各的事,互不阻塞和干扰。当然,现代CPU越来越快,单个计算阻塞的时间可能很小,但只要有阻塞,事件编程就毫无优势。所以进程、线程这类技术,并不会消失,而是与事件机制相辅相成,长期存在。
    总结之,事件驱动适合于IO密集型服务,多进程或线程适合于CPU密集型服务,它们各有各的优势,并不存在谁取代谁的倾向。再盲目的言之Nginx可以取代Apache的,该好好反思了。
    来源 风河博客 http://www.nsbeta.info/archives/136

以下为来自hostloc论坛会员“Kokgog”的评论:

这篇文章论据大部分是对的,论点和结论在卖萌
    webserver本身就是I/O密集型操作,CPU密集型的东西谁会扔给webserver做? 发展到现在, webserver的定位基本已经等同于一个实时性高的同步队列了,
    unix本身的哲学就是分拆任务,放到webserver上,就是转发数据给fcgi服务器, fcgi端处理数据再call数据库服务器,  照这篇文章的论点和结论,还用什么php和数据库, 直接apache层写C模块处理请求和文本存储算了
    很多大站或者企业站坚守apache的唯一原因是系统重,不方便迁移,都还在用2.4内核,用nginx/lighttpd这些异步webserver发挥不出多大作用,并不是因为apache有多先进, apache是伟大的,但是它的理念和实现放到现在就是滞后的。
    所谓的lnamp里面的apache做的任务,也就等同于fcgi server,并不代表它拿来做webserver

nginx和apache的一些比较的更多相关文章

  1. 前nginx后Apache+Node反向代理

    前几天一直在被一个问题困扰,机器上跑的站点太多了,Apache上面有十几个,NodeJS的也有一堆,记端口号都要烦死,于是萌生了使用反向代理的想法.出发点貌似太low了,完全不是出于负载均衡.高并发什 ...

  2. Nginx与Apache的比较

    Nginx与Apache的比较 Nginx相对于Apache的优点 轻量级.同样起web服务,比apache占用更少的资源和内存 抗并发.nginx处理请求是异步非阻塞,而apache则是阻塞型.在高 ...

  3. web服务器之nginx与apache

    最近准备架设php的web服务器,以下内容可供参考. 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞 ...

  4. Tomcat 搭配 Nginx 还是 Apache 呢?

    Apache .Tomcat.Nginx的区别, 哪个与Tomcat搭配效率高? 一. 定义: 1. Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机 ...

  5. nginx比较apache

    http://blog.csdn.net/hanghangaidoudou/article/details/8506963 话说nginx在大压力的环境中比apache的表现要好,于是下载了一个来折腾 ...

  6. nginx和apache的特点优点和使用场景

    Apache   Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.   Apache源于 ...

  7. nginx和apache的优缺点比较

    简单的说apache httpd和nginx都是web服务器,但两者适应的场景不同,也就是两者专注于解决不同的问题.apache httpd:稳定.对动态请求处理强,但同时高并发时性能较弱,耗费资源多 ...

  8. Nginx和Apache有什么区别?

    Nginx抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能. Apache  rewrite ,比nginx 的rewrite ...

  9. nginx与Apache的对比以及优缺点

    本文来自其他文章.如有好的问题,希望各位大神多多分享, 谢谢了..... 今天准备较详细的对比一下apache httpd与nginx两个web服务器的异同点.优缺点.由于我并不是做web开发的,所以 ...

随机推荐

  1. sqlserver2008 R2 创建作业(定时任务)

    如题: 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 完成!!! 记得把服务打开.设置为自动启动,别重启服务器后没用了.

  2. asp.net webform中使用async,await实现异步操作

    摘要 最近想着将项目中的部分耗时的操作,进行异步化.就自己弄个demo进行学习.只需下面几个步骤就可以将aspx页面中注册异步操作. demo 比如我们需要抓取某个url的内容,这个时候我们可能会有下 ...

  3. Python-时间操作

    目录 Python标准模块 datetime 数据类型 datetime timedelta 字符串和datetime的相互转换 datetime 转 字符串 str strftime strftim ...

  4. PHP 文件与目录操作函数总结

    >>>文件操作 打开 fopen();    打开文件 读取内容 fread();    从文件指针 handle 读取最多 length 个字节 readfile();    读入 ...

  5. nginx专题

    1.Nginx和php性能优化相关 专家向磊http://slaytanic.blog.51cto.com/2057708/1173021 2.Puppet利用Nginx多端口实现负载均衡http:/ ...

  6. 【bzoj1036】[ZJOI2008]树的统计Count

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v ...

  7. CPU核数跟多线程的关系

    一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的? 今天就这一问题查了一些资料,现整理如下: 要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键 ...

  8. springmvc之自定义注解(annotation)

    参考:日志处理 三:Filter+自定义注解实现 系统日志跟踪功能 1.项目结构 2.pom.xml,添加需要依赖 <project xmlns="http://maven.apach ...

  9. android ListView嵌套GridView显示不全问题

    只需重写GridView即可:public class MyGridView extends GridView{ public MyGridView(android.content.Context c ...

  10. Attempt to present <vc> on <vc> which is already presenting <vc>/(null)

    在给 tableViewCell 添加长按手势弹出一个 popViewController 的时候,遇到的这个变态问题: Warning: Attempt to present <UINavig ...