tomcat 与 nginx,apache的区别及优缺点

作者:David
链接:https://www.zhihu.com/question/32212996/answer/87524617
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

Apache,指的应该是Apache软件基金会下的一个项目——Apache HTTP Server Project;Nginx同样也是一款开源的HTTP服务器软件(当然它也可以作为邮件代理服务器、通用的TCP代理服务器)。

HTTP服务器本质上也是一种应用程序——它通常运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(一般来说是IE, Firefox,Chrome这样的浏览器)就能够通过HTTP协议来获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等等资源。下图描述的就是这一过程:

<img src="https://pic2.zhimg.com/904696074e077934e601f175913f42fd_b.png" data-rawwidth="849" data-rawheight="273" class="origin_image zh-lightbox-thumb" width="849" data-original="https://pic2.zhimg.com/904696074e077934e601f175913f42fd_r.png">
不仅仅是Apache HTTP Server和Nginx,绝大多数编程语言所包含的类库中也都实现了简单的HTTP服务器方便开发者使用:
使用这些类库能够非常容易的运行一个HTTP服务器,它们都能够通过绑定IP地址并监听tcp端口来提供HTTP服务。

Apache Tomcat则是Apache基金会下的另外一个项目,与Apache HTTP Server相比,Tomcat能够动态的生成资源并返回到客户端。Apache HTTP Server和Nginx都能够将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的——也就是说无论何时、任何人访问它得到的内容都是完全相同的,这样的资源我们称之为静态资源。动态资源则与之相反,在不同的时间、不同的客户端访问得到的内容是不同的,例如:
  • 包含显示当前时间的页面
  • 显示当前IP地址的页面
Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。
如果想要使用Java程序来动态生成资源内容,使用这一类HTTP服务器很难做到。Java Servlet技术以及衍生的Java Server Pages技术可以让Java程序也具有处理HTTP请求并且返回内容(由程序动态控制)的能力,Tomcat正是支持运行Servlet/JSP应用程序的容器(Container):
<img src="https://pic3.zhimg.com/2651b72ce2170336d10ad17fd020ae7a_b.png" data-rawwidth="885" data-rawheight="502" class="origin_image zh-lightbox-thumb" width="885" data-original="https://pic3.zhimg.com/2651b72ce2170336d10ad17fd020ae7a_r.png">Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下指责:Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下指责:
  • 管理Servlet程序的生命周期
  • 将URL映射到指定的Servlet进行处理
  • 与Servlet程序合作处理HTTP请求——根据HTTP请求生成HttpServletResponse对象并传递给Servlet进行处理,将Servlet中的HttpServletResponse对象生成的内容返回给浏览器

虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:
  • 动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。
  • 负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理
==================================================================================

一、 定义: 1. Apache 
Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。 
(Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。) 缺点:配置相对复杂,自身不支持动态页面。 
2. Tomcat: 
Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。 
3. Nginx 
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
二、 比较 
1. Apache与Tomcat的比较 
相同点: 
 两者都是Apache组织开发的  两者都有HTTP服务的功能  两者都是免费的 不同点: 
 Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器.  
 Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。 
 Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想; 
 Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。 
实际使用中Apache与Tomcat常常是整合使用:
 如果客户端请求的是静态页面,则只需要Apache服务器响应请求。  如果客户端请求动态页面,则是Tomcat服务器响应请求。  因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。 
可以理解Tomcat为Apache的一种扩展。 
2. Nginx与Apache比较 
1) nginx相对于apache的优点 
 轻量级,同样起web 服务,比apache占用更少的内存及资源   抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能   高度模块化的设计,编写模块相对简单   提供负载均衡 
 社区活跃,各种高性能模块出品迅速 2) apache 相对于nginx 的优点  apache的 rewrite 比nginx 的强大 ;  支持动态页面; 
 支持的模块多,基本涵盖所有应用;  性能稳定,而nginx相对bug较多。
3) 两者优缺点比较 
 Nginx 配置简洁, Apache 复杂 ; 
 Nginx 静态处理性能比 Apache 高 3倍以上 ; 
 Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;  Apache 的组件比 Nginx 多 ; 
 apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程;  nginx处理静态文件好,耗费内存少; 
 动态请求由apache去做,nginx只适合静态和反向;  Nginx适合做前端服务器,负载性能很好; 
 Nginx本身就是一个反向代理服务器 ,且支持负载均衡 
3. 总结 
 Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处
理静态请求的速度高于apache; 
 Apache优点:相对于Tomcat服务器来说处理静态文件是它的优
势,速度快。Apache是静态解析,适合静态HTML、图片等。  Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容
器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。
Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。 
阅读更多
个人分类: 系统相关 web
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭