我爱帮助网--QQ交流群号

Nas交流与矿渣群(unraid 群晖 猫盘 蜗牛等):372167400         物联网/智能家居群:518812757             帮助教程:手册大全

软件使用与建站群:1057308983      虚拟化交流群:13448651

apache tomcat nginx三者的区别与关系

2020-02-20 08:00:00
知乎
转贴:
知乎
3471

web上的server都叫web server,但是大家分工也有不同的。


1.nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的)
2.tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。
3.但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景。
4.而apache用的越来越少了,大体上和nginx功能重合的更多。
5.严格的来说,Apache/Nginx 应该叫做「HTTP Server」
6.而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。
7.一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。
8.而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。
9.你也把Tomcat 也可以认为是 HTTP 服务器,但通常它仍然会和 Nginx 配合在一起使用:
10.动静态资源分离——运用 Nginx 的反向代理功能分发请求:所有动态资源的请求交给 Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript 文件等)则直接由 Nginx 返回到浏览器,这样能大大减轻 Tomcat 的压力。
负载均衡,当业务压力增大时,可能一个 Tomcat 的实例不足以处理,那么这时可以启动多个 Tomcat 实例进行水平扩展,而 Nginx 的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理
 
11.apache和nginx可以归为一类,属于静态页面服务器。
12.tomcat属于Java Servlet容器,用来生成动态页面的。
13.apache属于比较老的静态页面服务器,比较多现有插件,包括代理、SSL支持、动态编程语言处理等。
14.nginx和apache差不多,都有插件支持动态编程语言处理等、但nginx的IO模型比apache更适合跑代理。所以一般都作为前端缓冲代理。
15.tomcat就是Java Servlet容器,主要用来跑Java的Web功能,当然也提供一个简单静态页面转换。
16.tomcat是servlet容器,另外2个不是。大家都已经说了。我说说我工作中nginx和apache的主要作用有哪些
  1 鉴权主要是http鉴权(basic模式),数据来源是ldap。http鉴权有basic和digest(摘要)鉴权,我只见过basic鉴权的,建议每个人都去了解一下协议和如何配置,其实也相当简单,花不了多少时间。知识点:http鉴权(basic模式),LDAPPS:tomcat也可以配置http鉴权。2. 负载均衡常规用处,没啥好说,找文档配置一下就知道。3. 处理静态文件最常规的功能。静态文件直接处理(一般加上缓存头),其他转给tomcat,用ajp协议(apache专用协议,nginx也有,但没有在ng上用过ajp转发)。知识点:ajp协议,页面缓存相关知识4 反向代理重要的功能,现在用得越来越多了。用于做请求分发,解决ajax跨域调用。知识点:ajax跨域5 页面缓存包括给静态文件返回缓存相关的头,和配置缓存模块。这是2个不同东西。知识点:浏览器如何缓存资源当然他们实际上的功能还有很多,工作中实际用到的就这些



相同:它们都是web server。
不同:apache/nignx是静态服务器,tomcat是动态服务器。
历史:apache是当年主流服务器,但不思进取,后来被俄罗斯的更加轻便的nignx赶上。 

一、 定义:
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本身就是一个反向代理服务器 ,且支持负载均衡
三、 总结
Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache;
Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。
Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。
Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。
真的日常工作中,一般的项目还是用nginx+tomcat来做会多一点


 
分别讲了Nginx、Apache和Tomcat的功能及优缺点。

1/3 什么是Nginx?
Nginx是一个高性能的反向代理服务器(只能处理静态页面)。所谓反向代理服务器,也可以称为消息转发服务器。举个例子,(见上图)
1. 用户只需要知道反向代理服务器(Nginx)的IP,并向它请求资源;
2. 反向代理服务器收到请求之后,将请求转发到对应的真正提供服务的Web服务器上;
3. 这时,Web服务器只需要把资源提交给反向代理服务器;
4. 最后,由反向代理服务器将资源提交给用户。

2/3 Apache Tomcat是什么?
这里,一般被视为Apache+Tomcat。Apache类似于Nginx功能,也可以做反向代理服务器,但也可以处理动态页面。Tomcat可以脱离于Apache单独运行,但更重要的是作为Apache的扩展,用来增强Apache处理动态页面的功能(具体来说就是将Jsp翻译为Servlet)。

3/3 小结
Apache很有年头了,Nginx是后起之秀。以下是简单比较,
其一,如果只需要静态消息的转发,毫无疑问Nginx是最佳的选择。它不仅具有很高的稳定性,更以其性能著称——官方表示其可以保持10,000个没有活动的连接,远大于Apache的1,000个以下,并且不惧DDoS攻击。
其二,如果需要处理动态页面,那么Apache Tomcat将是不错的选择。
其三,Nginx适合I/O密集型,可以处理高并发。Apache适合CPU密集型,可以快速处理请求。



首先要分清楚WEB服务器和应用服务器。WEB服务器就是可以解析HTTP协议的,你要访问一些图片和一些文本信息都可以使用WEB服务器来搞定。应用服务器就比较广泛了,从字面上来说,就是把写好的程序丢到应用服务器里执行,比如Java,常用的有tomcat,jetty、这些是为Java应用程序提供运行时环境的,一些动态页面,比如jsp它就必须在应用服务器里才能解析。所以,我们常常拿Java来开发后台应用程序,但是,大多数的要提供HTTP访问接口,一个站点,图片、js文件和css文件是少不了的,这些都是资源,要放在你的站点里面才能访问。这些资源就不需要放到应用服务器里了,太浪费资源了,直接丢到WEB服务器里就可以了。这是WEB服务器Apache和Nginx比较擅长的。总之,在稍微大一点的项目里,前端都会架设web服务器,然后由web服务器将请求转发给应用服务器,比如tomcat和jetty等。
 


Nginx和 Apache ,Tomcat对比!
三个行业鼎鼎有名的服务器软件!
程序员可以不知道蔡徐坤,但是没有不知道他们的!
但是由于公司技术选型问题,一部分开发人员可能只知其名,但是没有具体了解过区别!
最近身边的人很多面试都被问到了这道看似简单的问题,但是发现回答却有点说不清!
接下来说下个人理解!
Apache:
Apache 服务器可以运行在几乎所有广泛使用的计算机平台上,Linux、Unix、Windows等,Apache 是世界上使用最为广泛的 Web 服务器。 因为其具有高效、功能强大、超强可扩展性等特点。同时Apache是一个强大的模块化服务器!有着非常强大Apache扩展模块!可以帮助web应用更加的灵活和更加的强大。
但是要知道Apache本身是静态资源服务器!只支持静态页面HTML,ASP,PHP,Freemarke访问!也就是说当客户端访问Apache服务器,Apache服务器如实返回给请求的客户端!
如果想访问动态页面,例如Java的jsp和servlet等, Apache服务器就无法解析了,
Apache服务器很诚实!不会编译执行动态页面结果而直接返回文件,如果需要返回java程序的动态页面结果!需要Tomcat在Apache后台支撑,也就是说由Apache接受请求!转发给Tomcat进行处理!
但是相对复杂的配置文件以及模块化学习成本较高,和后期nginx更加轻量级的http服务器出现!让Apache逐步走下神坛!
Apache支持功能:
1.支持最新的HTTP/1.1通信协议
2.拥有简单而强有力的基于文件的配置过程
3.支持通用网关接口
4.支持基于IP和基于域名的虚拟主机
5.支持多种方式的HTTP认证
6.集成Perl处理模块
7.集成代理服务器模块
8.支持实时监视服务器状态和定制服务器日志
9.支持服务器端包含指令(SSI)
10.支持安全Socket层(SSL)
11.提供用户会话过程的跟踪
12.支持FastCGI
13.通过第三方模块可以支持JavaServlets
Apache模块化服务器软件,支持相关模块:
1. 并发限制模块
2. 日志监控模块
3. 压缩模块
4. 带宽限制模块
5. 负载均衡模块
6. 图像处理模块
Tomcat:
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,Tomcat 支持JavaEE的动态页面Jsp和Servlet解析。因为Tomcat性能稳定,配置简单而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的JavaWeb 应用服务器。但是要知道他Tomcat和IIS等Web服务器一样,也具有处理HTML等静态页面的功能!但是处理静态资源的性能远没有apache强大!
Tomcat服务器属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat是Apache 服务器的扩展,但运行时它是独立运行的。
Apache和tomcat可以结合使用!正确的搭配姿势,Apache 为HTML等静态页面服务,而Tomcat 实际上运行JSP 页面和Servlet等动态资源!
Nginx:
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx一出生就打着处理高并发的口号!强大的并发处理能力也顺应了当今web开发的发展趋势!大用户量大并发处理给用Nginx展示了施展才华的舞台!
中国使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
但是我们要知道nginx服务器也不直接处理请求,如果需要访问servlet或者动态的jsp页面!
还是需要nginx讲请求转发到tomcat等应用服务器处理请求!如果让一个tomcat面对大量的并发请求会有些应接不暇!我们可以通过nginx和tomcat结合负载均衡配置,大大提高web项目吞吐量,数据距离能力!
Nginx起到一个代理服务器的角色(即反向代理),通过轮询,权重,ip分配等方式将请求转发到不同的tomcat处理!多个tomcat共同完成了一件事情,性能大大提升!
理解每个作用!简单总结下对比!
Apache,Nginx对比 Tomcat:
Tomcat好比一个饭店的厨师!当饭店很小的时候!他不仅的做厨师自己还得做服务员!来人吃饭他询问客人吃什么,了解需求以后!还需要去后台做饭,在端给客人,客人走了他还要说句“OK 200”。Tomcat手艺不错,吃饭的人越来越多!Tomcat有点应接不暇!点菜,做菜,端菜。饭店决定,聘请一个服务员,再聘请一个厨师!服务员就是apache或者nginx,他负责接收客人的需求,但是他们不做菜,将菜单转发给厨师!厨师也轻松很了多,只负责做菜,而且还多了一个厨师,他的压力也减轻了一半!
Nginx/Apache负责前端接收请求,转发请求。tomcat进行请求处理!
Apache和Nginx:
因为他们的角色有点重叠!我们从技术层面进行对比!
Nginx:
epoll 异步非阻塞
nginx在开启时,会生成一个master进程,然后,master进程会fork多个worker子进程,最后每个用户的请求由worker的子线程处理。
可以配置nginx的upstream实现nginx的反向代理。
支持7层负载均衡
静态文件、反向代理、前端缓存等处理方便
支持高并发连接,每秒最多的并发连接请求理论可以达到 50000 个
配置文件简单
用线程处理用户请求,而线程是共享内存的,只需要开启少量进程,多个线程就可以共享进程的内存,占用内存小
一个进程死掉时,会影响到多个用户的使用,稳定性差
Apache:
稳定
rewrite强大
select 同步阻塞
一个连接对应一个进程
用进程处理用户请求,用MPM(多处理模块)来绑定到网络端口上,接受请求,调度子进程处理请求
当用户请求过多时,开启的进程较多,占用内存大,每秒最多的并发连接请求最多不超过 3000 个
一个进程死掉时,不会影响其他的用户

0
发表评论
评论通过审核后显示。
文章分类
联系我们
联系人: 王先生