结论:没有谁优于谁,都有各自的长处和短板。
Nginx 与 Apache 的区别
- 二者最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程 。Nginx 处理静态文件好, 耗费内存少. 但无疑 Apache 仍然是目前的主流, 有很多丰富的特性. 所以还需要搭配着来. 当然如果能确定 Nginx 就适合需求, 那么使用 Nginx 会是更经济的方式。
- Nginx 的负载能力比 Apache 高很多。最新的服务器也改用 Nginx 了。而且 Nginx 改完配置能 -t 测试一下配置有没有问题。
- Apache 重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端 Nginx 抗并发,后端 Apache 集群, 配合得也不错。
- Nginx 处理动态请求是鸡肋,一般动态请求要 Apache 去做,Nginx 只适合静态和反向。
- 从经验来看,Nginx 是很不错的前端服务器,负载性能很好,Nginx 用 webbench 模拟 10000 个静态文件请求毫不吃力。Apache 对 php 等语言的支持很好,此外 Apache 有强大的支持网络,发展时间相对 Nginx 更久,bug 少但是 Apache 有先天不支持多核心处理负载鸡肋的缺点,建议使用 Nginx 做前端,后端用 Apache。大型网站建议用 Nginx 自代的集群功能。
- 大部分情况下 Nginx 都优于 Apache,比如说静态文件处理、PHP-CGI 的支持、反向代理功能、前端 Cache、维持连接等。在 Apache+PHP(prefork)模式下,如果 PHP 处理慢或者前端压力很大的情况下,很容易出现 Apache 进程数飙升,从而拒绝服务的现象。
- Apache 在处理动态有优势,Nginx 并发性比较好,CPU 内存占用低,如果 rewrite 频繁,那还是 Apache 吧!
- 一般来说,需要性能的 web 服务,用 Nginx 。如果不需要性能只求稳定,那就 Apache 吧。
功能对比
Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。
- 在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,
- 对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;
- 在处理连接方式上,Nginx支持epoll,而Apache却不支持;
- 在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。
Nginx相对Apache的优点
- 轻量级,同样是web 服务,比apache 占用更少的内存及资源
- 静态处理,Nginx 静态处理性能比 Apache 高 3倍以上
- 抗并发,nginx 处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。在--Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。
- 高度模块化的设计,编写模块相对简单
Apache相对Nginx的优点
- rewrite,比nginx 的rewrite 强大
- 模块超多,基本想到的都可以找到
- Apache对PHP支持比较简单,Nginx需要配合其他后端用
同时使用Nginx和Apache
由于Nginx和Apache各自的优势,现在很多人选择了让两者在服务器中共存。在服务器端让Nginx在前,Apache在后。由Nginx做负载均衡和反向代理,并且处理静态文件,将动态请求(如PHP应用)交给Apache去处理。
关注公众号【技术全沾】学习更多有趣的编程知识。