您的位置:首页 > 运维架构 > Nginx

Apache与Nginx的优缺点比较

2017-06-01 11:20 239 查看
Apache与Nginx的优缺点比较 
1、nginx相对于apache的优点: 
轻量级,同样起web 服务,比apache 占用更少的内存及资源 
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 
高度模块化的设计,编写模块相对简单 
社区活跃,各种高性能模块出品迅速啊 
apache 相对于nginx 的优点: 
rewrite ,比nginx 的rewrite 强大 
模块超多,基本想到的都可以找到 
少bug ,nginx 的bug 相对较多 
超稳定 
存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache
的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。 

2、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了
epoll and kqueue 作为开发模型. 
Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多. 
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验. 
Nginx 是一个安装非常的简单 , 配置文件非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 . 

3、Nginx 配置简洁, Apache 复杂 
Nginx 静态处理性能比 Apache 高 3倍以上 
Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用 
Apache 的组件比 Nginx 多 
现在 Nginx 才是 Web 服务器的首选 

4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 

5、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式. 

6、从个人过往的使用情况来看,nginx的负载能力比apache高很多。最新的服务器也改用nginx了。而且nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。 

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

8、從我個人的經驗來看,nginx是很不錯的前端服務器,負載性能很好,在老奔上開nginx,用webbench模擬10000個靜態文件請求毫不吃力。apache對php等語言的支持很好,此外apache有強大的支持網路,發展時間相對nginx更久,bug少但是apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx做前端,後端用apache。大型網站建議用nginx自代的集群功能 

9、Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡;其他的当然,Nginx可能会比apache支持更高的并发,但是根据NetCraft的统计,2011年4月的统计数据,Apache依然占有62.71%,而Nginx是7.35%,因此总得来说,Aapche依然是大部分公司的首先,因为其成熟的技术和开发社区已经也是非常不错的性能。 

10、你对web server的需求决定你的选择。大部分情况下nginx都优于APACHE,比如说静态文件处理、PHP-CGI的支持、反向代理功能、前端Cache、维持连接等等。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。 

11、可以看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物 

12、对于nginx,我喜欢它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器 

13、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧

但是,Apache在高负载的情况下表现的差强人意,原因是它需要去运行新的进程,因此要消耗更多的内存。同时,他还要产生新的线程来与其他的线程竞争内存和CPU。当进程的流量达到了管理员设置的上限时,Apache会拒绝新的连接。
Nginx 是一个开源的服务器,用来解决一些Apache在性能和扩展性方面的问题的。Nginx是开源并且免费的,但是如果你购买了它的Nginx Plus版本的话是可以享受到服务支持的。
Nginx 声称它的服务器是用来解决C10K问题(出自Daniel Kegel发表的一篇关于如何使一个服务器处理10000个连接——假设的操作系统的上限的论文)的。在他的论文中,他引用了另一篇由Dean
Gaudet写的论文,其中写到“你们为什么不使用一个像Zeus那样的选择/事件(select/event)为基础的模型呢?很明显那是最快的”。
Nginx 确实是以事件为基础的(event-based)。他们把他们的架构称为“事件驱动且异步”(event-driven and asynchronous)。Apache 依赖于进程和线程。那么,区别是什么呢?




中奖啦
翻译于 3年前
4人顶

顶 翻译得不错哦!

Apache是如何工作的,为什么会有极限

Apache通过创建进程和线程来处理其他的连接。管理员可以通过设置来控制服务器所能允许的最大进程数量。这个配置因机器的可用内存而异。过多的进程会耗尽内存从而使得机器使用磁盘上的交换内存,这严重的降低了性能。而且,当达到进程的上限之后,Apache会拒绝新的连接。
Apache可以通过设置来运行在pre-forked 模式或worker multi-process 模式(MPM)。当其他的用户连接时,两种方式都会创建新的进程。区别在于,pre-forked模式为每一个进程创建一个线程,用来处理一个用户的请求。worker模式也创建新的进程,但是每一个进程至少有一个线程,每一个线程用来处理单个用户的单个请求。所以,一个worker mode 的进程处理至少一个连接,而一个per-fork 模式的进程只处理一个连接。




中奖啦
翻译于 3年前
4人顶

顶 翻译得不错哦!

相比于forked 模式,worker 模式使用更少的内存,原因是进程比线程消耗更多的内存,线程只是运行在进程中的代码。
此外,worker模式不是线程安全的。这意味着如果你使用像mod_php这样的非线程安全的模块来服务php页面时,你需要使用pre-forked模式,因此要消耗更多的内存。所以,当选择模块和配置服务器时,你必须要面对是线程还是进程更优的问题以及一些约束的问题。
在调整Apache时的一个限制因素是内存以及当争夺同一个CPU和内存时潜在的线程死锁问题。如果一个线程停止了,用户会一直处于等待页面出现的状态,直到进程将该线程回收,以便可以发回页面。如果一个线程发生了死锁,它不知道如何重启,因此会一直处于卡住状态。




中奖啦
翻译于 3年前
4人顶

顶 翻译得不错哦!

Nginx

和Apache相比,Nginx的工作方式有很大不同,主要是在于它如何处理线程。
Nginx并不会为每一个的web请求创建新的进程,相反,管理员可以配置Nginx主进程的工作进程的数量(一个常见的做法是为每一个CPU配置一个工作进程)。所有这些进程都是单线程的。每一个工作进程可以处理数千个并发的请求。它通过一个线程来异步的完成了这些工作,而没有使用多线程的编程模型。
Nginx还拆分了缓存加载器(cache loader)和缓存管理器(cache manager)进程用来从磁盘中读取数据并将其加载到缓存中,当缓存直接读取的时候缓存过期。
Nginx有一系列的模块组成,这些模块在编译的时候就被包含进去了。这意味着,用户下载源码并选择他们要编译的模块。这些模块中包括连接后端应用服务器,负载均衡,代理服务器以及其他。并没有PHP的模块,因为Nginx可以自己编译PHP代码。




中奖啦
翻译于 3年前
4人顶

顶 翻译得不错哦!

这里有一张图描述了Nginx的架构,该图来自Andrew Alexeev的深入分析Nginx及其工作方式。



从这个图表中我们可以看出,Nginx使用FastCGI进程来执行Python,Ruby以及其他代码,使用Memcached对象缓存系统。工作进程为HTTP请求加载ht_core Nginx进程。我们还可以看到,Nginx和Windows以及Linux内核的功能紧密的集成在了一起,以便提升性能。这些内核功能已经经过长时间的改良,而Nginx正是利用了这一点。
Nginx声称是事件驱动,异步且无阻塞的。“事件(Event)”指的是一个用户的连接。“异步(Asynchronous)”指的是它一次处理多个用户连接的用户交互。“无阻塞(Non-blocking)”指的是它不会由于CPU处于忙状态而停止磁盘的I/O,在这种情况下,它会处理其他事件,直到I/O资源得到释放。




中奖啦
翻译于 3年前
2人顶

顶 翻译得不错哦!

Nginx 与 Apache 2.4 MPM

Apache 2.4包含多路处理事件模块(MPM event module)。它能处理在异步方式下的连接类型,Niginx同样也能做,但是在方式上是不一样的。目的是在负载增长的时候,压缩对内存的需求。
在早期的版本中,Apache 2.4包含工作者(worker)和前复制叉(pre-forked)模式,除了我们之前提到那些,还包括已经被添加的mpm_event_module(Apache MPM event module),它被用来解决为了保活而等待这个连接的线程问题(等待是因为这个连接是用户额外的请求)。MPM致力于一个线程能处理套接字(sockets)中监听(listening)和保活(keep-alive)这两者的状态。这个关于地址的内存问题与旧版本的Apache相关,通过减少线程数量以及进程的创建次数。正是这一点,管理员可能要下载Apache的源代码并且包括mem_event_module,还要编译Apache,用以代替正在使用的二进制发行版。




无若
翻译于 3年前
2人顶

顶 翻译得不错哦!

Apache的MPM事件模型与Nginx的并不完全相同,这是因为当Apache接收到新的请求(请求的数量受到管理员所设置的限制)时,它就会产生新的进程。Nginx不会为每个用户创建多个进程。在Apache 4.2上做了如下改进:与Apache通常的工作者模式相比 ,这个版本里所创建的服务进程将会生成更少的线程。这是因为一个线程可以处理多个连接,而不是每个连接需要一个进程为其提供服务。

既使用Nginx,又使用Apache

Apache是因为其功能强大而出名的,而Nginx是因为其响应速度快而著称的。这就意味着Nginx在静态内容的服务上要相对快些,不过,Apache可以使用模块来运行后台应用服务器,而且还可以运行脚本语言。




几点人
翻译于 3年前
2人顶

顶 翻译得不错哦!

Apache和Nginx都可以用作代理服务器,不过通常我们会把Nginx用作代理服务器,而把Apache用作后台服务器。Nginx包含了 先进的负载均衡和内容缓冲功能。当然,Apache服务器的部署数量巨大。为了充分发挥Apache服务器的效能,就需要有负载均衡器。Apache可以使用自身所包含负载均衡模块,另外,还可以使用基于硬件的负载均衡器。
另一种使用方法是给Nginx配置独立的 php-fpm应用,我们认为 php-fpm是一个应用,这是因为它不是执行期间可以装载的.dll或者.so,而是与Apache的模块使用方法相同。Ngnix使用php-fpm(FastCGI进程管理器)来处理php脚本,这就使得Nginx具有生成非静态内容的功能。




几点人
翻译于 3年前
3人顶

顶 翻译得不错哦!

什么时候更适合用Apache?

Apache 具有内建支持PHP,Python,Perl等语言的能力。例如,mod_perl和mod_php模块可以用来在Apache的进程中处理PHP和Perl的代码。mod_python比使用CGI或FastCGI更高效,因为它不需要为每一个请求加载Python的解释器。对mod_rails和mod_rack模块来说也是一样,这些模块使得Apache可以运行Ruby on Rails。这些进程在Apache的进程中运行的更快一些。
所以,如果你的网站主要是用Python或Ruby开发的,你最好使用Apache,因为Apache不需要使用CGI。对于PHP来说,用谁就无所谓了,因为Nginx也支持内建的PHP了。
我们在这里给出了Nginx和Apache之间的一些差异,以及我们该如何去考虑使用其中的一个或者两者都用,以及哪一个更加适合你的需求。另外,我们也讨论了Apache2.4已经把Nginx在线程和进程管理方面的一些提升加入到了Apache的服务器中。所以,你可以为你的需求找到最好的解决方案的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: