文档首页/ 全球加速 GA/ 最佳实践/ GA获取客户端源IP
更新时间:2025-08-07 GMT+08:00

GA获取客户端源IP

应用场景

客户端源IP指的是访问者(用户设备)的IP地址,全球加速 GA(Global Accelerator)支持获取客户端源IP功能,后端服务器可以通过该功能获取发起访问的客户端源IP。

本文为您介绍在不同场景中后端服务器如何获取客户端源IP。

约束与限制

  • 代理服务器和后端服务器必须同时支持Proxy Protocol协议才能正常使用。如果后端服务器不具备解析Proxy Protocol协议的能力,直接打开特性开关将导致后端服务解析异常,从而影响服务可用性。
  • GA仅支持Proxy Protocol v2版本,根据监听协议的不同,全球加速支持的获取客户端源IP情况也不同:
    • UDP:不支持获取客户端源IP。
    • TCP:根据终端节点类型不同,需要后端服务器做相应适配以获取客户端源IP。
      关于适配说明,请参见下表:

      终端节点类型

      获取客户端源IP

      后端服务器适配

      说明

      ECS

      支持

      不需要(后端服务收到报文的源IP就是客户端源IP)

      • 默认情况下,GA服务使用TOA协议将客户端源IP传递给后端服务器,客户需要在后端服务器上配置TOA插件才能获取客户端源IP。

        详细请参见TOA插件配置

      • 对于开启了Proxy Protocol功能的加速器,GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器,客户需要在后端服务器上开启Proxy Protocol功能。

      EIP

      需要

      ELB

      自定义IP

      自定义域名

      自定义EIP

通过Proxy Protocol协议获取客户端源IP

本节以终端节点类型为EIP,后端服务使用Nginx为例,介绍如何开启Proxy Protocol功能,并查看已获取的客户端源IP。

  1. 提交工单,开启Proxy Protocol功能。
  2. 在后端服务器上开启Proxy Protocol功能。

    Nginx的http{}和stream{}模块均可以接收Proxy Protocol,在http{}模块或stream{}模块中添加相应处理Proxy Protocol的端口。

    http {
        #...
        server {
            listen 8080 proxy_protocol;    #在8080端口,开启解析proxy protocol。
            #...
        }
    }
    
    stream {
        #...
        server {
            listen 8090 proxy_protocol;    #在8090端口,开启解析proxy protocol。
            #...
        }
    }
  3. 获取客户端源IP。

    开启Proxy Protocol后,Nginx会将客户端源IP保存在变量proxy_protocol_addr中,可以将其保存在日志中。

    http {
        #...
        log_format  main  '[$time_local] $proxy_protocol_addr : $proxy_protocol_port $host "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';
    }
    
    stream {
        #...
        log_format  main  '[$time_local] $proxy_protocol_addr : $proxy_protocol_port $host "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';
    }
  4. 查看日志,获取客户端源IP。