做者:知乎用户
连接:https://www.zhihu.com/questio...
来源:知乎算法
Apache,指的是Apache软件基金会下的一个项目——Apache HTTP Server Project;Nginx一样也是一款开源的HTTP服务器软件(固然它也能够做为邮件代理服务器、通用的TCP代理服务器)。
HTTP服务器本质上也是一种应用程序——它一般运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(通常来讲是IE, Firefox,Chrome这样的浏览器)就可以经过HTTP协议来获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等等资源。
下图描述的就是这一过程:
不单单是Apache HTTP Server和Nginx,绝大多数编程语言所包含的类库中也都实现了简单的HTTP服务器方便开发者使用:HttpServer (Java HTTP Server )Python SimpleHTTPServer使用这些类库可以很是容易的运行一个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):Tomcat运行在JVM之上,它和HTTP服务器同样,绑定IP地址并监听TCP端口,同时还包含如下指责:编程
虽然Tomcat也能够认为是HTTP服务器,但一般它仍然会和Nginx配合在一块儿使用:动静态资源分离——运用Nginx的反向代理功能分发请求:全部动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时能够启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能能够把请求经过算法分发到各个不一样的实例进行处理。浏览器