Skip to main content

Apache 与 Nginx 比较

当前基本Nginx是标配,首选Nginx

下面区别仅做参考吧:

Apache

Web服务器

特点

rewrite ,比nginx 的rewrite 强大 ;

模块超多,基本想到的都可以找到 ;

少bug ,nginx 的bug 相对较多 ;

超稳定 ;

Apache在处理动态有优势,nginx比较适合跑静态

Nginx

Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,负载均衡服务器

工作原理:

Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、 cache loader和cache manager均应以非特权用户身份运行。nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用事件通知机制。在nginx中,连接请求由为数不多的 几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个的并发连接及请求。

特点:

轻量级,同样起web 服务,比apache 占用更少的内存及资源;

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

Nginx 配置简洁, Apache 复杂;

最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 ;在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。

nginx 处理静态文件好,静态处理性能比 apache 高三倍以上

总结:

一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。

epoll(freebsd 上是 kqueue ) 网络 IO 模型是 nginx 处理性能高的根本理由,但并不是所有的情况下都是 epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的 select 模型或许比 epoll 更高性能。当然,这只是根据网络 IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。

更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,(即把Nginx用作代理服务器,而把Apache用作后台服务器)配合起来会更好。

最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。 

nginx是异步的,多个连接(万级别)可以对应一个进程