下面我们来看看apache与nginx到底有什么区别,话不多bb,直接来干的
1.首先来看nginx相对于apache的优点
轻量级,同样比起来web服务器,比apache占用更少的内存与资源
抗病发,nginx请求时异步非堵塞的,(异步非堵塞的理解:非阻塞是这样定义的,当线程遇到 I/O 操作时,不会以阻塞的方式等待 I/O 操作的完成或数据的返回,而只是将 I/O 请求发送给操作系统,继续执行下一条语句。当操作系统完成 I/O 操作时,以事件的形式通知执行 I/O 操作的线程,线程会在特定时候处理这个事件。),而这个apache则是阻塞型的(阻塞:《node.js开发指南》是这样定义的:线程在执行中如果遇到(I/O 操作)如磁盘读写或网络通信,通常要耗费较长的时间,这时操作系统会剥夺这个线程的 CPU 控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为 阻塞。当 I/O 操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行。这种 I/O 模式就是通常的同步式 I/O(Synchronous I/O)或阻塞式 I/O(Blocking I/O)。),所以说在高并发的情况下nginx可以保持低资源低消耗而且高性能。
高度模块化的设计,编写模块相对简单
2.apache相对于nginx的优点
rewrite,比这个nginx更强大(rewrite规则介绍:Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性(httpd.conf中的Option FollowSymLinks)且在.htaccess里要声明RewriteEngine on。
)超稳定,少bug
下面是一些详细的比较介绍:
1.nginx配置简介,apache相对复杂,nginx启动容易,并且可以做到7*24小时不间断运行,即使运行数月也无需重启,你还可以不间断服务器的情况下进行升级,nginx静态处理性能比apache高三倍以上,apache对php的支持比较简单,nginx需要配置其他后端来使用,apache的组件比nginx多。
2.最核心的区别在于apache是同步多进程模型,一个连接对应一个模型,ngxinx是异步的,多个链接可以对应一个进程。
3.nginx的优势是处理静态请求,cpu内存使用率低,apache是个处理动态请求,所以现在前端用nginx反向代理抗住压力,apache作为后端动态处理请求。