浅谈 Apache HTTP server,tomcat 和nginx

一.       Apache,Nginx 和Tomcat分别是什么:

ApacheHTTP Server:

(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

 

Nginx:

Nginx是轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。

 

Tomcat

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,实现了对ServletJavaServer PageJSP)的支持,也可称为是ServletJSP 容器。对 web 程序来说,容器的作用就相当于桌面程序里操作系统的作用,提供一些编程基础设施并提供了作为Web服务器的一些特有功能,可以运行自己编写的servlet应用程序处理动态请求。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但是,不能将TomcatApache HTTP服务器混淆,Apache HTTP服务器是一个用C语言实现的HTTP Web服务器;这两个HTTP web server不是捆绑在一起的。

 

二.        Apache和Tomcat的区别与联系:

Apache Tomcat 都是web网络服务器,两者既有联系又有区别。Apacheweb服务器(静态解析,如HTML),Tomcatjava应用服务器(动态解析,如JSPPHP)也是web应用服务器。Tomcat只是一个servlet(JSP也翻译成servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

 

ApacheTomcat的共同点为:

1.      Apache组织开发的

2.      具有HTTP服务的功能

3.      都是开源免费的

 

ApacheTomcat的区别为:

1.      ApacheWeb服务器,Web服务器传送(serves)页面使浏览器可以浏览,Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供 (serves)商业逻辑(business logic)

Tomcat是运行在Apache上的应用服务器,应用程序服务器提供的是客户端应用程序可以调用(call)的方法 (methods)。可以认为是Apache的扩展,但是可以独立于Apache运行。

2.      Apache是普通服务器,本身只支持HTML静态普通网页。TomcatJSP/servlet容器,同时也支持HTMLJSPASPPHPCGI等。

3.      Apache侧重于http serverTomcat侧重于servlet引擎,如果以standalone方式运行,功能上TomcatApache等效支持JSP,但对静态网页不太理想。

4.      Apache可以运行一年不重启,稳定性非常好,而Tomcat则不见得。

5.      首选web服务器是Apache,当遇到Apache解析不了的JSPservlet才用Tomcat

6.      Apache是由C语言实现的,支持各种特性和模块从而来扩展核心功能;TomcatJava编写的,更好的支持ServletJSPApache不能解析java的东西,但解析HTML速度快。

 

ApacheTomcat同时使用:

Apache可以通过插件支持PHP,还可以与Tomcat连通(Apache单向连接Tomcat,通过Apache可以访问Tomcat资源,反之不可)处理ASPJSPPHPCGI等动态网页。ApacheTomcat可以整合使用,如果客户端请求的是静态页面,则只需要Apache服务器响应请求;如果客户端请求动态页面,则是Tomcat服务器响应请求,将解析的JSP等网页代码解析后回传给Apache服务器,再经Apache返回给浏览器端。JSP是服务器端解释代码的,Tomcat只做动态代码解析,Apache回传解析好的静态代码,Apache+Tomcat这样整合就可以减少Tomcat的服务开销。

举例说明:目的是带宠物从A城去往B城(完成动态请求)。Apache像是一架飞机,允许带宠物(动态请求),但是宠物不能直接上飞机,需要装在宠物筐里放在行李舱,Tomcat就是实现封闭宠物(动态请求)的宠物筐。而飞机允许带衣服、纸巾等物品(静态请求)直接上飞机。Tomcat相对于Apache更像是一个扩展功能,为了实现Apache本不能实现或不易实现的功能而存在的。除了乘坐飞机这个方式,也可以选择拎着宠物筐装着宠物直接走去B城。

 

三.       Apache和Nginx的区别与联系:

NginxWeb服务器,处理静态文件、索引文件,自动索引的效率非常高,同时也可作代理服务器,实现无缓存的反向代理加速,提高网站运行速度,还可以作为负载均衡服务器,既可以在内部直接支持RailsPHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡。开发Nginx的目的是为了性能优化,因此非常注重效率。Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24小时不间断地运行

 

ApacheNginx的共同点为:

1.      都是HTTP服务器软件

2.      功能上都采用模块化结构设计

3.      都支持通用的语言接口,如PHPPerlPython

4.      支持正向、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输

 

ApacheNginx的不同点为:

1.      Apache处理速度很慢,占用很多内存资源,Nginx相对 Apache是轻量级的,同样的web 服务,比Apache 占用更少的内存及资源抗并发。Nginx 处理请求是异步非阻塞的,而Apache则是阻塞型的,在高并发下Nginx 能保持低资源低消耗高性能。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象

2.      功能实现上,Apache所有模块支持动静态编译,Nginx模块都是静态编译的

3.      FCGI的支持上,Nginx支持效果比Apache的支持好很多

4.      处理连接方式,Nginx支持epoll, Apache不支持

5.      空间使用上,Nginx安装包仅几百K

6.      静态处理上,Nginx 静态处理性能比 Apache高 3倍以上

7.      模块化上,Nginx高度模块化的设计,编写模块相对简单,社区活跃,模块更新速度很快。而Apache出现的较早,现有模块非常多,常见的都可以找到。

 

对于web服务,如果稳定性的需求高于性能和效率需求,就用Apache,反之则选择Nginx。当然,可以同时使用Apache和Nginx。

 

l  Apache 和Nginx同时使用:

通常在服务器中同时使用Apache和Nginx时,根据二者各自的特性和优势。在服务器端让Nginx在前,Apache在后。由Nginx做负载均衡和反向代理,并且处理静态文件,将动态请求(如PHP应用)交给Apache去处理。

 

四.       服务器部署路线:

路线一:

Apache

(可通过添加扩展、模块开发等形式完成动态请求)

路线二:

Nginx

(可通过添加扩展、模块开发等形式完成动态请求)

路线三:

Tomcat

(通常用在内网和不需要流控等小型服务的场景。)

路线四:

Apache

———>

Tomcat

 

路线五:

Nginx

———>

Tomcat

 

(最为常用)

路线六:

Nginx

———>

Apache

———>

Tomcat

(最为常用)

注:Apache用的越来越少了,和Nginx功能重合的很多。

 

五.       总结

Apache:是静态解析,适合静态HTML、图片等。相对于Tomcat服务器来说处理静态文件是它的优势,速度快。

Nginx:优势在于负载均衡、反向代理和处理静态文件。相对于Apache服务器来说处理静态请求的速度更快。

Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。

 

 

参考资料:

https://www.zhihu.com/question/19571087/answer/133244938

https://www.zhihu.com/question/19571087/answer/12313829

https://zh.wikipedia.org/wiki/Apache_HTTP_Server

https://blog.csdn.net/tjiyu/article/details/54590258

 



你可能感兴趣的:(名词理解)