17 HTTP 反向代理
-
总结
1、HTTP 代理就是客户端和服务器通信链路中的一个中间环节,为两端提供 代理服务
2、代理处于中间层,为 HTTP 处理增加了更多的灵活性,可以实现 负载均衡、安全防护、数据过滤 等功能
3、代理服务器需要使用字段
Via
标记自己的身份,多个代理会形成一个列表4、如果想要知道客户端的真实 IP 地址,可以使用字段
X-Forwarded-For
和X-Real-IP
5、专门的代理协议可以在 不改动原始报文 的情况下传递客户端的真实 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
结束