一. Apache,Nginx 和Tomcat分别是什么:
ApacheHTTP Server:
(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
Nginx:
Nginx是轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
Tomcat:
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,实现了对Servlet和JavaServer Page(JSP)的支持,也可称为是Servlet和JSP 容器。对 web 程序来说,容器的作用就相当于桌面程序里操作系统的作用,提供一些编程基础设施并提供了作为Web服务器的一些特有功能,可以运行自己编写的servlet应用程序处理动态请求。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但是,不能将Tomcat和Apache HTTP服务器混淆,Apache HTTP服务器是一个用C语言实现的HTTP Web服务器;这两个HTTP web server不是捆绑在一起的。
二. Apache和Tomcat的区别与联系:
Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别。Apache是web服务器(静态解析,如HTML),Tomcat是java应用服务器(动态解析,如JSP、PHP)也是web应用服务器。Tomcat只是一个servlet(JSP也翻译成servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
l Apache和Tomcat的共同点为:
1. 由Apache组织开发的
2. 具有HTTP服务的功能
3. 都是开源免费的
l Apache和Tomcat的区别为:
1. Apache是Web服务器,Web服务器传送(serves)页面使浏览器可以浏览,Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供 (serves)商业逻辑(business logic)。
Tomcat是运行在Apache上的应用服务器,应用程序服务器提供的是客户端应用程序可以调用(call)的方法 (methods)。可以认为是Apache的扩展,但是可以独立于Apache运行。
2. Apache是普通服务器,本身只支持HTML静态普通网页。Tomcat是JSP/servlet容器,同时也支持HTML、JSP、ASP、PHP、CGI等。
3. Apache侧重于http server,Tomcat侧重于servlet引擎,如果以standalone方式运行,功能上Tomcat与Apache等效支持JSP,但对静态网页不太理想。
4. Apache可以运行一年不重启,稳定性非常好,而Tomcat则不见得。
5. 首选web服务器是Apache,当遇到Apache解析不了的JSP、servlet才用Tomcat。
6. Apache是由C语言实现的,支持各种特性和模块从而来扩展核心功能;Tomcat是Java编写的,更好的支持Servlet和JSP。Apache不能解析java的东西,但解析HTML速度快。
l Apache和Tomcat同时使用:
Apache可以通过插件支持PHP,还可以与Tomcat连通(Apache单向连接Tomcat,通过Apache可以访问Tomcat资源,反之不可)处理ASP、JSP、PHP、CGI等动态网页。Apache和Tomcat可以整合使用,如果客户端请求的是静态页面,则只需要Apache服务器响应请求;如果客户端请求动态页面,则是Tomcat服务器响应请求,将解析的JSP等网页代码解析后回传给Apache服务器,再经Apache返回给浏览器端。JSP是服务器端解释代码的,Tomcat只做动态代码解析,Apache回传解析好的静态代码,Apache+Tomcat这样整合就可以减少Tomcat的服务开销。
举例说明:目的是带宠物从A城去往B城(完成动态请求)。Apache像是一架飞机,允许带宠物(动态请求),但是宠物不能直接上飞机,需要装在宠物筐里放在行李舱,Tomcat就是实现封闭宠物(动态请求)的宠物筐。而飞机允许带衣服、纸巾等物品(静态请求)直接上飞机。Tomcat相对于Apache更像是一个扩展功能,为了实现Apache本不能实现或不易实现的功能而存在的。除了乘坐飞机这个方式,也可以选择拎着宠物筐装着宠物直接走去B城。
三. Apache和Nginx的区别与联系:
Nginx是Web服务器,处理静态文件、索引文件,自动索引的效率非常高,同时也可作代理服务器,实现无缓存的反向代理加速,提高网站运行速度,还可以作为负载均衡服务器,既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡。开发Nginx的目的是为了性能优化,因此非常注重效率。Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24小时不间断地运行
l Apache和Nginx的共同点为:
1. 都是HTTP服务器软件
2. 功能上都采用模块化结构设计
3. 都支持通用的语言接口,如PHP、Perl、Python等
4. 支持正向、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输
l Apache和Nginx的不同点为:
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