`

Apache与Nginx的比较

阅读更多

什么是Nginx代理代理服务器,它和Apache相比又有什么区别呢?你又该如何选择使用呢,用其中一个还是两者都用?我们将会在这里探索一下这些问题的答案。

Apache服务器从1995年就开始使用了。相比其他产品,Apache服务器是使用最多的,其次是微软的IIS服务器。

由于开源的Apache服务器已经被使用多年,并且有众多的用户,人们开发出了很多的模块来扩展它的功能,其中的大多数模块也是开源的。举例来说,一个比 较常见的配置是使用Apache来为静态页面提供服务,并使用mod_jk模块来运行Tomcat上的Java和JSP代码,以便使程序具有交互功能。另 一个例子是使用mod_php模块来执行php代码,而不用去使用cgi。

但是,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 依赖于进程和线程。那么,区别是什么呢?

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

Apache通过创建进程和线程来处理其他的连接。管理员可以通过设置来控制服务器所能允许的最大进程数量。这个配置因机器的可用内存而异。过多的进程会 耗尽内存从而使得机器使用磁盘上的交换内存,这严重的降低了性能。而且,当达到进程的上限之后,Apache会拒绝新的连接。

Apache可以通过设置来运行在pre-forked 模式或worker multi-process 模式(MPM)。当其他的用户连接时,两种方式都会创建新的进程。区别在于,pre-forked模式为每一个进程创建一个线程,用来处理一个用户的请 求。worker模式也创建新的进程,但是每一个进程至少有一个线程,每一个线程用来处理单个用户的单个请求。所以,一个worker mode 的进程处理至少一个连接,而一个per-fork 模式的进程只处理一个连接。

相比于forked 模式,worker 模式使用更少的内存,原因是进程比线程消耗更多的内存,线程只是运行在进程中的代码。

此外,worker模式不是线程安全的。这意味着如果你使用像mod_php这样的非线程安全的模块来服务php页面时,你需要使用pre-forked 模式,因此要消耗更多的内存。所以,当选择模块和配置服务器时,你必须要面对是线程还是进程更优的问题以及一些约束的问题。

在调整Apache时的一个限制因素是内存以及当争夺同一个CPU和内存时潜在的线程死锁问题。如果一个线程停止了,用户会一直处于等待页面出现的状态,直到进程将该线程回收,以便可以发回页面。如果一个线程发生了死锁,它不知道如何重启,因此会一直处于卡住状态。

Nginx

和Apache相比,Nginx的工作方式有很大不同,主要是在于它如何处理线程。

Nginx并不会为每一个的web请求创建新的进程,相反,管理员可以配置Nginx主进程的工作进程的数量(一个常见的做法是为每一个CPU配置一个工 作进程)。所有这些进程都是单线程的。每一个工作进程可以处理数千个并发的请求。它通过一个线程来异步的完成了这些工作,而没有使用多线程的编程模型。

Nginx还拆分了缓存加载器(cache loader)和缓存管理器(cache manager)进程用来从磁盘中读取数据并将其加载到缓存中,当缓存直接读取的时候缓存过期。

Nginx有一系列的模块组成,这些模块在编译的时候就被包含进去了。这意味着,用户下载源码并选择他们要编译的模块。这些模块中包括连接后端应用服务器,负载均衡,代理服务器以及其他。并没有PHP的模块,因为Nginx可以自己编译PHP代码。

这里有一张图描述了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资源得到释放。

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, 用以代替正在使用的二进制发行版。

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

既使用Nginx,又使用Apache

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

Apache和Nginx都可以用作代理服务器,不过通常我们会把Nginx用作代理服务器,而把Apache用作后台服务器。Nginx包含了 先进的负载均衡和内容缓冲功能。当然,Apache服务器的部署数量巨大。为了充分发挥Apache服务器的效能,就需要有负载均衡器。Apache可以 使用自身所包含负载均衡模块,另外,还可以使用基于硬件的负载均衡器。

另一种使用方法是给Nginx配置独立的 php-fpm应用,我们认为 php-fpm是一个应用,这是因为它不是执行期间可以装载的.dll或者.so,而是与Apache的模块使用方法相同。Ngnix使用php- fpm(FastCGI进程管理器)来处理php脚本,这就使得Nginx具有生成非静态内容的功能。

什么时候更适合用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的服务器中。所以,你可以为你的需求找到最好的解决 方案的。

 

更多请支持:http://www.webyang.net/Html/web/article_207.html

0
0
分享到:
评论

相关推荐

    apache与nginx区别

    ### Apache与Nginx的区别详解 #### 一、概述 在服务器领域,Apache与Nginx作为两大主流的Web服务器软件,在技术实现上各有特点,适用于不同场景的需求。本文将从多个角度对这两种服务器进行比较分析,帮助读者理解...

    apache到nginx配置文件转换工具

    一个开源的Linux下运行的命令行工具,能将Apache的配置文件转换成相应的Nginx的配置文件。本工具能自动将Apache Web服务器的配置文件转化成Nginx的配置文件,减少WEB服务器迁移的工作量。 该工具从Apache Web服务器...

    apache与nginx安装使用

    Apache与Nginx是两种广泛使用的HTTP服务器,它们在Web服务领域扮演着重要角色。Apache以其强大、稳定和丰富的模块支持而闻名,而Nginx则以高效的反向代理、负载均衡和静态文件处理能力著称。下面我们将详细介绍这两...

    Apache + nginx + resin 详细配置

    4. 部署与调试:完成配置后,重启Apache和Nginx服务,以使新的配置生效。如果遇到问题,尤其是关于请求处理的,可以检查Apache和Nginx的日志文件,如`/var/log/nginx/test.zen.com.access.log`,它们会记录每次请求...

    Apache2Nginx简单试用

    Apache2Nginx是一个开源的linux下运行的命令行工具.它可以把apache 配置文件转换成对应的nginx 配置文件.对于一般的功能. 比如目录 url重写.这都从测试来看.基本上不存在问题.对于不能转换的.会有注释在转换好的配置...

    高并发环境下 Apache 与 Nginx 的 IO 性能比较

    ### 高并发环境下 Apache 与 Nginx 的 IO 性能比较 随着互联网技术的快速发展,网络用户数量急剧增加,导致网络服务器面临高并发访问的压力。在这种情况下,提高服务器的I/O性能变得尤为重要。本文主要探讨了Linux...

    apache+nginx+tomcat

    同时,Apache 也可以通过 mod_proxy 与 Nginx 配合,将 Java 相关的请求转发给 Tomcat。 3. Tomcat 主要处理 JSP、Servlet 和其他基于 Java 的应用。 这种架构的优点是: - 高并发:Nginx 的高效能处理静态资源和...

    cluster+apache+nginx

    "cluster+apache+nginx"的组合就是一种常见的高性能Web服务架构。这个标题和描述涉及到的知识点主要集中在如何将Apache HTTP Server和Nginx通过集群的方式进行整合,以实现负载均衡、高可用性和优化性能。 Apache ...

    php apache/nginx

    标题中的“php apache/nginx”指的是在Web开发中使用PHP与Apache或Nginx服务器进行集成的技术。Apache和Nginx都是流行的HTTP服务器,用于托管静态和动态内容。PHP是一种广泛使用的开源脚本语言,尤其适合处理动态...

    apache2nginx.zip

    【Apache与Nginx对比】 Apache和Nginx都是广泛使用的HTTP服务器,但它们的工作方式有所不同。Apache采用预读取和解析请求的多进程模型,每个连接都会分配一个独立的进程,这可能导致内存消耗较高。相比之下,Nginx...

    实战Nginx取代Apache的高性能Web服务器_文字版

    一、Nginx与Apache的性能对比 1. 并发处理:Nginx采用异步非阻塞I/O模型,可以同时处理大量并发请求,而Apache则采用多进程或线程模型,对系统资源消耗较大。 2. 内存占用:Nginx的单进程内存占用相对较小,适合...

    php运行环境搭建(apache nginx)

    这里我们关注的是两种常见的服务器环境配置:Apache和Nginx,这两种服务器软件与PHP和MySQL的集成。这两种环境配置都能为PHP提供稳定且高效的运行平台。 **Apache + PHP + MySQL** Apache是世界上最流行的Web...

    nginx替代方案,nginx代替apache与jboss

    本文将详细介绍如何使用 Nginx 替代 Apache,并与 JBoss 结合使用,以提高系统的整体性能。 #### 现有部署情况 当前系统使用的是 **Apache + mod_jk + JBoss** 的组合。其中 mod_jk 作为 Apache 和 JBoss 之间的...

    linux + apache(nginx) + mysql + php 配置 详解

    3. 配置Nginx与PHP:在Nginx的站点配置文件中添加`location ~ \.php$ { ... }`段,指定PHP处理器。 **整合LAMP/LNMP**: 1. 对于LAMP,Apache直接处理PHP文件。确保Apache配置正确识别.php文件并传递给PHP解释器。 ...

    Nginx+Apache负载均衡

    ### Nginx+Apache负载均衡知识点详解 #### 一、Nginx简介及特性 **Nginx** 是一种高性能的 HTTP 和反向代理 Web 服务器,同时也支持 IMAP/POP3/SMTP 服务。其核心特点包括: - **高性能**:能够处理大量并发连接...

    Linux+Apache+Nginx+Mysql+PHP完美配置教程

    【Linux+Apache+Nginx+Mysql+PHP完美配置教程】 在配置Linux服务器以支持LAMP(Linux, Apache, MySQL, PHP)环境时,我们需要进行一系列的准备工作和安装步骤。以下是一个详细的步骤指南: **一、准备工作** 1. *...

    Linux-Apache-Nginx-MySQL-PHP

    与Apache相比,Nginx更适用于高流量、静态内容多的网站,可以处理大量的并发连接。 **MySQL**:MySQL是一款关系型数据库管理系统,它是开源且免费的,广泛用于存储和管理网站数据。MySQL以其快速、可靠和易用性著称...

    Apache、Nginx、PHP、Zend、MySQL 整合包 2 分包

    Apache、Nginx、PHP、Zend、MySQL 整合包 2 分包 版本 ---------------- Apache = 2.2.14 Nginx = 0.8.20 PHP = 5.2.13 Zend = 3.3.0a MySQL = 6.0.11 特点 ---------------- 1. 可以安装到任意目录,前提父...

Global site tag (gtag.js) - Google Analytics