本文主要是为了帮助萌新理解在web开发时遇到的关于web工作原理的疑问,由于本人水平十分有限,所以本文仅作为一般性参考,如有错误,欢迎批评指正OVO。
首先说明的是,我们所谓的web服务器并不是物理上的服务器,而是建立在物理服务器上的一个web应用的运行环境,是一个软件服务器。这就好比前后端分离开发时,后端模块在物理服务器上的JVM,前端也需要一个“运行环境”进行工作,那么web服务器端概念就应运而生了,大概就好比下图。
上图中拥有VUE经典的原谅色的web服务器就是我们前端运行的地方,可见web服务器的主要作用是给前端一个合理的运行环境,其实不只是看起来那么简单,web服务器还要处理代理、反向代理、跨域、并支持并发等等。说到反向代理和跨域就不的不说nginx这个著名的web服务器,在本文中暂不展开说明,可能后续会写关于nginx的详细吧(咕咕咕)。要着重说明的是,比起nginx,新人玩家更常接触的是apache+tomcat这样的组合,亦或者只用tomcat也是可以的。
下面就要详细解释下同样都是web服务器,为什么要apache和tomcat组合使用了。其实web服务器并不是一个高度聚合的环境,其中分为静态内容如HTML和动态内容如jsp,前端在工作的时候需要一个服务器来加载静态内容,并通过静态内容操作动态的jsp,那么这时候就需要一个“容器”来放置那些因为产生操作对象而不确定占用多少数据空间的动态数据,这就是所谓的web容器,也叫web应用服务器(这里所谓的web容器和部署用的Docker容器是完全不同的东西,虽然是都叫容器),常见的web应用服务器就是tomcat。因此web应用服务器是在web服务器之内的,从理论上有包含关系,我们再看Apache和tomcat的话就会发现,虽然两者都是web服务器,但是Tomcat是运行在Apache之上的,也就是说客户端的请求先到web服务器,再到web应用服务器,web应用服务器管控其容器中对象的生命周期,再进行下一步响应。虽然其中的架构原理笔者还没能力掌握,但至少可以提供如下的关系图。
至此,基本区分了web服务器之中的各种概念,再次基础上延伸的就是如何理解Apache和Tomcat以及nginx之间的协作关系了。特别的说明Tomcat作为应用服务器包含了一些HTTP服务器端功能,所以某些项目是可以不使用apache只是用tomcat来运行的,而apache和nginx之间本质的区别在于apache是同步进程模型,而nginx是异步并发的,支持反向代理和跨域,故大型的web项目都会使用Apache+Tomcat+nginx组合成“现代web三剑客”来使用。
感谢您的观看,啾咪 ∠(`ω´*)۶