全球加速支持代理协议(Proxy Protocol),您可以通过代理协议保留客户端源IP。

前提条件

开始前,请确保满足以下条件。
  • 目前,保留客户端源IP功能白名单开放,如需使用请提交工单
  • 您已经添加了监听。详细信息,请参见添加监听

背景信息

Proxy Protocol是一种Internet协议,通过为tcp报文添加Proxy Protocol报头来获取客户端信息,通常在网络环境复杂且又需要获取客户端真实信息的场景下使用。

Proxy Protocol的接收端必须在接收到完整有效的Proxy Protocol头部后才能开始处理连接数据,因此对于服务器中的同一个监听端口,不能同时接收携带Proxy Protocol和未携带Proxy Protocol的连接请求。如果接收到的第一个数据包不符合Proxy Protocol格式,那么服务器会直接终止连接。

说明 源站是阿里云负载均衡7层服务(HTTP/HTTPS监听)不支持通过Proxy Protocol保留客户端源IP信息。但如果源站是其他云上负载均衡7层服务或IDC自建负载均衡7层服务,您需要先确认源站是否支持解析Proxy Protocol。确认支持解析Proxy Protocol后,您再开启保留客户端源IP功能。

步骤一:开启保留客户端源IP

完成以下操作,开启全球加速的保留客户端源IP功能。

  1. 登录全球加速管理控制台
  2. 实例列表页面,找到目标全球加速实例,单击操作列下的配置监听
  3. 监听页签下,找到目标监听,单击操作列下的配置
  4. 监听&协议向导,打开保留客户端源IP的开关,然后单击下一步
    打开保留客户端源IP
  5. 设置终端节点组向导,单击下一步
  6. 配置审核向导,确认无误后,单击下一步

步骤二:源站配置Proxy Protocol

源站配置Prooxy protocol后,无法接收未携带Proxy Protocol的连接请求,只能接收携带了Proxy Protocol的请求。

本示例以HTTP场景为例,介绍Nginx如何解析Proxy Protocol获取源IP信息,并插入到X-Forwarded-For中,用于业务服务器获取客户端源IP。
upstream example.com {
  server 10.xx.xx.42:9000   max_fails=200 fail_timeout=10;
  keepalive 2000;
}

server {
    listen                            80 proxy_protocol;                    ## 开启解析proxy_protocol
    server_name                       example.com;
    keepalive_timeout                 60;
    include                           global.conf;
    include                           error_pages.conf;

    proxy_set_header                  X-Forwarded-For $proxy_protocol_addr; ## 在发给后端服务时,插入http头**
    proxy_set_header                  X-Real-PORT $remote_port;


    location /dispatch {
      set $switch "example.com";
      proxy_pass                      http://$switch;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
   }
}
客户端通过全球加速提供的加速IP访问源站服务,Nginx处理了Proxy Protocol请求,业务服务器就可以在HTTP头部的X-Forward-For中查看客户端源IP信息,格式如下。
X-Forwarded-For: 客户端源IP, 代理服务器1-IP, 代理服务器2-IP,...

获取的第一个IP即为客户端源IP。