Nginx vs Apache

两大web服务器对垒

Nginx 的优势

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

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

  3. 高度模块化的设计,编写模块相对简单

  4. 社区活跃,各种高性能模块出品迅速

  5. 安装非常的简单 , 配置文件非常简洁(还能够支持perl语法);nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃

  6. Nginx 静态处理性能比 Apache 高 3倍以上

  7. apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

  8. Nginx本身就是一个反向代理服务器; 支持7层负载均衡

Apache 的优势

  1. 重写模块rewrite比nginx强大

  2. 出现时间较长,稳定,文档丰富,模块超多,基本只要你能想到的,就有人开发过; 所以Apache的组件比Nginx多

  3. 70%的web服务器市场占有率

  4. bug少 ,nginx的bug相对较多; 超级稳定

  5. Apache对PHP支持很好,Nginx需要配合其他后端用; 在处理动态请求上有优势

  6. nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向

两者的取舍

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

  2. 如果需要大量用到重写模块,建议选用Apache

  3. 系统资源有限,但是自身技术很强大,建议用nginx,因为nginx对系统资源暂用极小,同资源下比Apache高了差不多10倍之多

动静分离

结合两个web服务器各自的优点,我们可以使用nginx处理静态文件和做负载反向代理,apache负责处理php动态页面,通过简单的配置实现动静分离。

由于apache处理静态页面的效率不高,而一般网站大多数的内容都是静态文件(如图片、html、css、js等),经过nginx前端的反向代理加速和过滤,后端apache处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在性能与稳定性的权衡下,使用nginx+apache搭配便可让它们在各自擅长的领域大展拳脚。

再配合nginx的lua模块,可以更高效的分担后端动态脚本的处理压力。后面博文中会提到淘宝工程师开发的openresty,一款嵌入lua的nginx服务器,敬请期待 :)