http笔记整理:代理服务

链条的起点还是客户端(也就是浏览器),

中间的角色被称为代理服务器(proxy server),

链条的终点被称为源服务器(origin server)

“代理服务”就是指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份:面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器时,又表现为客户端,代表客户端发送请求。

 

“计算机科学领域里的任何问题,都可以通过引入一个中间层来解决。如果一个中间层解决不了问题,那就再加一个中间层。”

代理最基本的一个功能是负载均衡。因为在面向客户端时屏蔽了源服务器,客户端看到的只是代理服务器,源服务器究竟有多少台、是哪些 IP 地址都不知道。于是代理服务器就可以掌握请求分发的“大权”,决定由后面的哪台服务器来响应请求

负载均衡的同时,代理服务还可以执行更多的功能:

健康检查:使用“心跳”等机制监控后端服务器,发现有故障就及时“踢出”集群,保证服务高可用;

安全防护:保护被代理的后端服务器,限制 IP 地址或流量,抵御网络攻击和过载;

加密卸载:对外网使用 SSL/TLS 加密通信认证,而在安全的内网不加密,消除加解密成本;

数据过滤:拦截上下行的数据,任意指定策略修改请求或者响应;

内容缓存:暂存、复用服务器响应

代理服务器需要用字段“Via”标明代理的身份

Via 是一个通用字段,请求头或响应头里都可以出现。每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾。

如果通信链路中有很多中间代理,就会在 Via 里形成一个链表。

服务器的 IP 地址应该是保密的,关系到企业的内网安全,所以一般不会让客户端知道。不过反过来,通常服务器需要知道客户端的真实 IP 地址,方便做访问控制、用户画像、统计分析。

HTTP 标准里并没有为此定义头字段,但已经出现了很多“事实上的标准”,最常用的两个头字段是“X-Forwarded-For”和“X-Real-IP”

“X-Forwarded-For”的字面意思是“为谁而转发”,也是每经过一个代理节点就会在字段里追加一个信息。但“Via”追加的是代理主机名(或者域名),而“X-Forwarded-For”追加的是请求方的 IP 地址。所以,在字段里最左边的 IP 地址就客户端的地址。

X-Real-IP”是另一种获取客户端真实 IP 的手段,记录客户端 IP 地址,没有中间的代理信息

访问“http://www.chrono.com/21-1”,它会转而访问“http://origin.io”。这里的“origin.io”就是源站,它会在响应报文里输出“Via”“X-Forwarded-For”等代理头字段信息:

 

 

 

代理与客户端、源服务器的通信过程:

1.客户端 55061 先用三次握手连接到代理的 80 端口,然后发送 GET 请求;

2.代理不直接生产内容,所以就代表客户端,用 55063 端口连接到源服务器,也是三次握手;

3.代理成功连接源服务器后,发出了一个 HTTP/1.0 的 GET 请求;

4.因为 HTTP/1.0 默认是短连接,所以源服务器发送响应报文后立即用四次挥手关闭连接;

5.代理拿到响应报文后再发回给客户端,完成了一次代理服务。

 

在这个实验中,你可以看到除了“X-Forwarded-For”和“X-Real-IP”,还出现了两个字段:“X-Forwarded-Host”和“X-Forwarded-Proto”,它们的作用与“X-Real-IP”类似,只记录客户端的信息,分别是客户端请求的原始域名和原始协议名

 

代理协议:

“代理协议”(The PROXY protocol),它由知名的代理软件 HAProxy 所定义,也是一个“事实标准”,被广泛采用(注意并不是 RFC)

“代理协议”有 v1 和 v2 两个版本,v1 和 HTTP 差不多,也是明文,而 v2 是二进制格式。

代理会增加链路长度,在代理上做一些复杂的处理。会很耗费性能,增加响应时间。

反向代理中的负载均衡算法:

1.随机

2.轮询

3.一致性hash

4最近最少使用

5.链接最少

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值