Nginx 与 Apache 对比分析
2021/12/9
名词解释
-
正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
-
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
Nginx简介
-
轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源
-
抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
-
nginx 处理静态文件好,静态处理性能比 apache 高三倍以上
-
nginx 的设计高度模块化,编写模块相对简单
-
nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃
-
nginx 作为负载均衡服务器,支持 7 层负载均衡
-
nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器
-
启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
-
社区活跃,各种高性能模块出品迅速
-
可以实现无缓存的反向代理加速,提高网站运行速度
-
作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡
-
在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核Poll模型(epoll and kqueue ),可以支持更多的并发连接,最大可以支持对50 000个并发连接数的响应,而且只占用很低的内存资源。
-
在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持10 000个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的。
-
在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7×24小时不间断地运行
apache简介
-
apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
-
apache 发展到现在,模块超多,基本想到的都可以找到
-
apache 更为成熟,少 bug ,nginx 的 bug 相对较多
-
apache 超稳定
-
apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
-
apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
-
apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区
对比
对比项 | Nginx | Apache | 备注 |
---|---|---|---|
进程模型 | 异步,多个连接(万级别)可以对应一个进程 | 同步多进程模型,一个连接对应一个进程 | |
稳定性 | 没有apache好 | 比Nginx好 | |
性能 | 比apache高 | 没有Nginx高 | |
静态文件处理 | 比Apache有优势(高三倍) | 比Nginx弱 | |
动态请求处理 | 比apache弱 | 比Nginx强 | |
空间使用上 | Nginx安装包仅仅只有几百k | 和Nginx比起来Apache绝对是庞然大物 | |
使用内存上 | 比apache 占用更少的内存及资源 | 比Nginx使用更多内存 |