Web服务器工作原理
HTTP协议基于TCP协议上,是一个应用层协议,用于用户代理和Web服务器进行通信。Web服务器通常采用一问一答的方式进行工作:
1、在用户代理上用户发起资源请求,请求内容包括但不限于:指定资源的唯一标识IRI,指明动作类型(GET/POST/DELETE/PUT…)
2、用户代理解析用户输入IRI并从中获取目标域名,交由DNS服务器解析。如果IRI中指定某IP地址,这无需这步。
3、如果与服务器的会话还没建立,此时先建立TCP连接,并完成HTTP协商(确定双方均可接受的处理方式,包括协议版本,是否加密,内容格式等等)。
4、用户代理把请求内容封装成HTTP数据包向服务器发送。
5、服务器接收到资源请求并以之前协商好的方式解包并处理。
6、服务器请求的资源封装成HTTP数据包并返回给用户代理。
接下来重点说说服务器端的工作原理
TCP监听模块
服务器监听某个端口(一般默认是8080端口,用户可以设置其他端口),以建立和用户代理之间的连接。一旦建立连接,用户代理的后续HTTP请求将不用再进入监听模块。
预处理
此处主要做三件事:1. 从TCP报文中获取HTTP请求报文。2. 根据和用户代理的协商进行解密,解压,安全处理等等。3. 根据服务器自身的配置进行安全处理,建立会话状态等等。
UR路由
解析URL字符串和动作以确定用户代理请求的资源,根据匹配规则(通常根据正则表达式+后缀)路由到静态资源处理模块或动态资源处理模块。
静态资源处理模块
负责找到静态资源,比如HTML/Javascript/CSS文件/图片/图像,确定内容是字符流或者字节流,并确定对应MIME,比如HTML生成MIME为text/html的字符流,mpeg视频文件生成MIME为video/mpeg的字节流。
动态资源处理模块
运行业务逻辑处理,动态决定返回的资源内容和类型,内容和类型的处理原则同上。
后处理
根据和用户协商的协议进行加密,压缩,安全处理等等。
资源输出模块
把处理好的内容和类型封装成HTTP报文,往TCP连接另一头的用户代理发送TCP报文(内容是HTTP报文)。
主流Web服务器
包括Apache、IIS 、Nginx,市场占有率如下
还有比较多使用Tomcat,Jetty,WebSphere,WebLogic,Kerstrel等等。
Web应用程序容器的基本工作原理
一般情况下Web应用程序容器是以下构成体系:
注:浅蓝色的模块是实现业务程序的主要使用模块。
典型的Web应用服务器的结构图:
反向代理概念与基本原理
反向代理基本概念
反向代理是代理服务器的一种。它根据客户端的请求,从后端的服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端。与前向代理不同,前向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端(如Web服务器)作为代理使用,而不是客户端。客户端通过前向代理可以访问很多不同的资源,而反向代理是很多客户端都通过它访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器。
互联网中的请求发送给反向代理,反向代理把请求转发到内网中的服务器。
反向代理的主要作用为:
- 加密和SSL加速
- 负载均衡
- 缓存静态内容
- 压缩
- 减速上传
- 安全防火墙
- 外网发布
- 突破互联网封锁
- 解决跨域问题
反向代理基本工作原理
一个反向代理服务器的构成和处理过程如下图:
左边淡黄色功能模块对外网报文进行处理,右边灰色功能模块针对内网报文进行处理
TCP监听模块
监听TCP请求,这里的请求是指报文内容是某应用层协议(比如HTTP,FTP,EMAIL等应用层协议)的请求。至于这里是否会单独产生一个线程来开始处理,这个由服务器自己决定,目前最流行的是先入消息队列然后异步处理,这样能极大提高代理的吞吐量和稳定性。
匹配被代理服务器
代理服务器根据一个表(存放外网url和内网服务器的对应关系,通常需人工进行设置),如果匹配到则继续处理,否则依据外网协议返回错误信息,比如HTTP协议这返回404。
应用负载均衡策略
如果比较大型的互联网应用,为了整体系统稳定性,解决单点问题,需要根据自定义策略合理的转发报文给被代理服务器。简单的策略是哈希分发或者随机分发,一般可以由用户进行配置和选择。
预处理
这里依据协商好的外网应用协议进行解密,安全,会话,解压等处理。
新生成网络报文
这里依据协商好的内网应用协议生成网络报文,这里可能会进行加密,安全,会话,压缩等处理。
转发给被代理服务器
把新生成的网络报文发送给内网服务器(可能是否Web服务器,Ftp服务器,邮件服务器)。
接受网络报文
接受内网服务器反馈的网络报文。
预处理
这里依据协商好的外网应用协议进行加密,安全,会话,压缩等处理。
资源输出模块
这时生成满足外网应用协议要求的报文,并发送到外网连接的另一端(用户代理)。
常用的反向代理服务器
它们的名字您一定记得:Ngnix,IIS,Apache。
一文看懂 Web服务器、应用服务器、Web容器、反向代理服务器区别与联系 :https://mp.weixin.qq.com/s/B450SoAgmsW1FbVsFsbdGQ