17 HTTP 反向代理
- 
    总结 1、HTTP 代理就是客户端和服务器通信链路中的一个中间环节,为两端提供 代理服务 2、代理处于中间层,为 HTTP 处理增加了更多的灵活性,可以实现 负载均衡、安全防护、数据过滤 等功能 3、代理服务器需要使用字段 Via标记自己的身份,多个代理会形成一个列表4、如果想要知道客户端的真实 IP 地址,可以使用字段 X-Forwarded-For和X-Real-IP5、专门的代理协议可以在 不改动原始报文 的情况下传递客户端的真实 IP 
代理定义
服务本身不生产内容,而是处于中间位置 转发上下游的请求和响应
具有双重身份
- 面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求
- 面向上游的源服务器时,又表现为客户端,代表客户端发送请求
代理的作用
- 负载均衡:代理服务器就可以掌握 请求分发 的大权,决定由后面的哪台服务器来响应请求
- 健康检查:使用心跳等机制监控后端服务器,发现有故障就及时踢出集群,保证 服务高可用
- 安全防护:保护被代理的后端服务器,限制 IP 地址或流量,抵御网络攻击和过载
- 加密卸载:对外网使用 SSL/TLS加密通信认证,而在安全的 内网不加密,消除加解密成本
- 数据过滤:拦截上下行的数据,任意指定策略修改请求或者响应
- 内容缓存:暂存、复用服务器响应
代理相关头字段
- 
    Via:通用字段,请求头或响应头里都可以出现,用于 判断是否存在代理 每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾,形如Via: proxy2, proxy1 
- 
    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结束 
代理作用下的请求流程
