17 HTTP 反向代理

Posted by CodingWithAlice on April 27, 2021

17 HTTP 反向代理

  • 总结

    1、HTTP 代理就是客户端和服务器通信链路中的一个中间环节,为两端提供 代理服务

    2、代理处于中间层,为 HTTP 处理增加了更多的灵活性,可以实现 负载均衡、安全防护、数据过滤 等功能

    3、代理服务器需要使用字段 Via 标记自己的身份,多个代理会形成一个列表

    4、如果想要知道客户端的真实 IP 地址,可以使用字段 X-Forwarded-ForX-Real-IP

    5、专门的代理协议可以在 不改动原始报文 的情况下传递客户端的真实 IP

代理定义

服务本身不生产内容,而是处于中间位置 转发上下游的请求和响应

具有双重身份

  • 面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求
  • 面向上游的源服务器时,又表现为客户端,代表客户端发送请求

代理的作用

  • 负载均衡:代理服务器就可以掌握 请求分发 的大权,决定由后面的哪台服务器来响应请求
  • 健康检查:使用心跳等机制监控后端服务器,发现有故障就及时踢出集群,保证 服务高可用
  • 安全防护:保护被代理的后端服务器,限制 IP 地址或流量,抵御网络攻击和过载
  • 加密卸载:对外网使用 SSL/TLS 加密通信认证,而在安全的 内网不加密,消除加解密成本
  • 数据过滤:拦截上下行的数据,任意指定策略修改请求或者响应
  • 内容缓存:暂存、复用服务器响应

代理相关头字段

  • Via:通用字段,请求头或响应头里都可以出现,用于 判断是否存在代理 每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾,形如 Via: proxy2, proxy1

    image-20210427212025963

  • X-Forwarded-For:每经过一个代理节点就会在字段里 追加请求方的 IP

  • X-Real-IP记录客户端 IP 地址,没有中间的代理信息

    作用:服务器的 IP 为了安全问题,应该是对客户端保密的;但是通常服务器需要知道客户端的真实 IP 地址,方便做访问控制、用户画像、统计分析

    代理协议

    解决问题:

1、通过 X-Forwarded-For 操作代理信息必须要解析 HTTP 报文头,代理服务器成本变高

2、有些情况下是不允许甚至不可能修改原始报文(比如使用 HTTPS 通信被加密)

代理协议 - HAProxy:在 HTTP 报文前增加了一行 ASCII 码文本

  • 开头必须是 PROXY 五个大写字母,然后是 TCP4 或者 TCP6,表示客户端的 IP 地址类型,再后面是 请求方地址、应答方地址、请求方端口号、应答方端口号,最后用一个回车换行 \r\n 结束

    image-20210427212104631

代理作用下的请求流程

image-20210427212136691