Skip to main content

20 HTTP的代理服务

代理服务

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

代理的作用

代理处在 HTTP 通信过程的中间位置,相应地就对上屏蔽了真实客户端,对下屏蔽了真实服务器。

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

代理相关头字段

代理服务器需要用字段 Via 标明代理的身份,每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾,追加的是代理主机名(或者域名),如果通信链路中有很多中间代理,就会在 Via 里形成一个链表。

X-Forwarded-For 每经过一个代理节点就会在字段里追加一个信息,追加的是请求方的 IP 地址。在字段里最左边的 IP 地址就是客户端的地址。

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

代理协议

The PROXY protocol:在 HTTP 报文前增加了一行 ASCII 码文本,相当于又多了一个头。开头必须是 PROXY 五个大写字母,然后是 TCP4 或者 TCP6,表示客户端的 IP 地址类型,再后面是请求方地址、应答方地址、请求方端口号、应答方端口号,最后用一个回车换行(\r\n)结束。

PROXY TCP4 1.1.1.1 2.2.2.2 55555 80\r\n
GET / HTTP/1.1\r\n
Host: www.xxx.com\r\n
\r\n