Web Server 与 App Server
Web Server
常见的Web Server有Apache Server与Nginx。
Apache Http Server是Apache软件基金会下的一个项目,是一款开源的HTTP服务器软件(它也可以作为邮件代理服务器、通用的TCP代理服务器)。
Nginx之前有配置它的博文,大多数用它来做负载均衡。
这两者基本相同,HTTP服务器本质上也是一种应用程序——通常运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(各种浏览器)就能够通过HTTP协议来获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)包括CSS、JS等等资源。下图描述的就是这一过程:
Web Server一般至于企业防火墙之外,这个防火墙可以认为是一个路由器,然后再CISCO路由器上开放了两个端口为:80和443。其中80端口用于正常的http访问。443端口用于https访问,即如果你在浏览器中输入https://www.xxx.com这样的地址,默认走的是443这个端口。
总而言之,Web Server起到了占用服务器端口和只能解析一些静态文件的作用。
一个HTTP Server关心的是HTTP协议层面的传输和访问控制,所以在Apache/Nginx上你可以看到代理、负载均衡等功能。客户端通过HTTP Server访问服务器上存储的资源(HTML文件、图片文件等等)。通过CGI技术,也可以将处理过的内容通过HTTP Server分发,但是一个HTTP Server始终只是把服务器上的文件如实的通过HTTP协议传输给客户端。
App Server
其至于企业防火墙之内,它和Web Server之间的连接必须且一定为内部IP连接。外部IP:即Internet IP地址,我们的Web服务器一般会有一个内部IP和一个外部IP,因此在这里,我们的App Server没有任何外部IP,只有内部IP,所以我们在这里说App Server与Web Server只能以内部IP形式连接。比如说我们用的App Server是Tomcat,它的端口为8080,那么这个IP地址上的8080端口只能由任何内部IP才能访问,外部的Internet是访问不了的,这样做就是为了安全!
App Server用于解析我们的任何需要Java编译器才能解析的“动态”网页,其实App Server本身也能解析任何静态网页的。
Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。
如果想要使用Java程序来动态生成资源内容,使用这一类HTTP服务器很难做到。Java Servlet技术以及衍生的Java Server Pages技术可以让Java程序也具有处理HTTP请求并且返回内容(由程序动态控制)的能力,Tomcat正是支持运行Servlet/JSP应用程序的容器(Container):
Tomcat是Apache软件基金会下的另一个项目,与Apache HTTP Server相比,Tomcat能够动态的生成资源并返回到客户端。Apache HTTP Server和Nginx都能够将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的——也就是说不能和网页进行一些交互,只能做简单的页面跳转,比如:包含显示当前时间的页面;显示当前IP地址的页面;
Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下职责:管理Servlet程序的生命周期;将URL映射到指定的Servlet进行处理;与Servlet程序合作处理HTTP请求——根据HTTP请求生成HttpServletResponse对象并传递给Servlet进行处理,将Servlet中的HttpServletResponse对象生成的内容返回给浏览器。
Tomcat可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:
动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力;负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理。
为什么既要有Web Server,又要有App Server?
我们可以让专门负责解析静态网页的Web Server来解析HTML等内容,而让App Server专门用于解析任何需要Java编译器才能解析的东西,让它们“两人”各司其职。
这样的好处:
- 为App Server“减压”,同时也提高了performance(性能)。
- 不用再把8080这个端口暴露在Internet上了,这样很安全;-),毕竟App Server上是有我们的代码的,就算是编译过的代码class文件,也是容易被“反编译”的。
- 这也为将来的进一步的“集群扩展”打好了基础。
Web Server 与 App Server的更多相关文章
- web server与app server有什么不同
简单来说,web服务器提供页面给浏览器,而app服务器提供客户端可以调用的接口.具体而言,我们可以说: Web服务器处理HTTP请求,而app服务器基于多种不同的协议,处理应用程序的逻辑问题. 以下将 ...
- Difference between web server ,web container and application server
In Java: Web Container or Servlet Container or Servlet Engine : is used to manage the components lik ...
- office web app server部署和简单操作
部署环境:windows server 2012 R2,服务器在AD域中 参考网址: https://msdn.microsoft.com/zh-cn/magazine/jj219455(office ...
- office web app server 文件预览部署&& wopi 集成使用
对于需要进行office 套件文档预览的时候大部分大家使用的是插件,或者类似的,解决方案,微软已经为我们提供了比较好的解决 方案 office web app server (目前名称是office ...
- App server 与 Web server之间的区别
原文: http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html 简单来说,web服务器提供页面给浏览器,而app服 ...
- Python接口测试实战5(下) - RESTful、Web Service及Mock Server
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- JDK和Tomcat环境变量,以及用MyEclipse新建Web Project测试Tomcat Server
[请尊重原创版权,如需引用,请注明来源及地址] 在此之前一直用的Eclipse挺顺手的,今天突然想换MyEclipse试试,不知安装MyEclipse的时候我选错了什么选项,反正JDK和Tomcat的 ...
- dubbo框架的web端(war)和server端(tar.gz)结合jenkins打包方式
一.web端程序,打包成war包 jenkins配置 1.项目名称,旧文件处理配置 2.参数构建配置 3.源码库配置 4.打包文件pom.xml配置及多环境打包传参,此处传参qa(表示打测试环境包,名 ...
- Accessing Report Server using Report Server Web Service - Microsoft SQL Server 2008R2
Today I am going to write about how to access SQL Server Report Server through Report Server Web ser ...
随机推荐
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
- Mac PATH你所需要了解的
关于Mac环境变量你需要知道: 0.何为环境变量? 1.如何查看环境变量? 2.如何配置环境变量? 3.如何重置环境变量? 0.环境变量: 所谓环境变量,$PATH,应用于Linux,OS X,Uni ...
- C/C++语言中闭包的探究及比较
这里主要讨论的是C语言的扩展特性block.该特性是Apple为C.C++.Objective-C增加的扩展,让这些语言可以用类Lambda表达式的语法来创建闭包.前段时间,在对CoreData存取进 ...
- iOS Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to
刚接触iOS,依照教程操作执行出现错误 Terminating app due to uncaught exception 'NSInternalInconsistencyException', re ...
- apache提示没有设置 max-age or expires解决办法
大家看到这个就应该知道只要设置 max-age or expires就行了.下面说的方法是在设置 apache下的方法: 产生要开启 代码如下 复制代码 LoadModule headers_modu ...
- Python 爬虫实例(15) 爬取 百度百聘(微信公众号)
今天闲的无聊,爬取了一个网站,百度百聘,仅供学习参考 直接上代码: #-*-coding:utf-8-*- from common.contest import * def spider(): hea ...
- C#基础第五天-作业答案-用DataTable制作名片集
.DataTable 实现 DataTable PersonCard = new DataTable(); //创建一个DataTable DataTable PersonCardCopy = new ...
- C++ Primer笔记 容器和算法(2)
erase 删除后 返回的是删除元素的后一个迭代器位置 int main() { //怎样正确的删除全部元素 循环 int a[]={1,2,3,4,5,6,7,8,9}; vector<in ...
- nginx配置长连接
http { keepalive_timeout 20; --长连接timeout keepalive_requests 8192; --每个连接最大请求数 } events { worker_con ...
- pandas数组(pandas Series)-(3)向量化运算
这篇介绍下有index索引的pandas Series是如何进行向量化运算的: 1. index索引数组相同: s1 = pd.Series([1, 2, 3, 4], index=['a', 'b' ...