
# 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插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)   - 对于开启了Proxy Protocol功能的加速器，GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器，客户需要在后端服务器上开启Proxy Protocol功能。   |
    | EIP        | 支持           | 需要                        | - 默认情况下，GA服务使用TOA协议将客户端源IP传递给后端服务器，客户需要在后端服务器上配置TOA插件才能获取客户端源IP。 详细请参见[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)   - 对于开启了Proxy Protocol功能的加速器，GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器，客户需要在后端服务器上开启Proxy Protocol功能。   |
    | ELB        | 支持           | 需要                        | - 默认情况下，GA服务使用TOA协议将客户端源IP传递给后端服务器，客户需要在后端服务器上配置TOA插件才能获取客户端源IP。 详细请参见[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)   - 对于开启了Proxy Protocol功能的加速器，GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器，客户需要在后端服务器上开启Proxy Protocol功能。   |
    | 自定义IP      | 支持           | 需要                        | - 默认情况下，GA服务使用TOA协议将客户端源IP传递给后端服务器，客户需要在后端服务器上配置TOA插件才能获取客户端源IP。 详细请参见[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)   - 对于开启了Proxy Protocol功能的加速器，GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器，客户需要在后端服务器上开启Proxy Protocol功能。   |
    | 自定义域名      | 支持           | 需要                        | - 默认情况下，GA服务使用TOA协议将客户端源IP传递给后端服务器，客户需要在后端服务器上配置TOA插件才能获取客户端源IP。 详细请参见[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)   - 对于开启了Proxy Protocol功能的加速器，GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器，客户需要在后端服务器上开启Proxy Protocol功能。   |
    | 自定义EIP     | 支持           | 需要                        | - 默认情况下，GA服务使用TOA协议将客户端源IP传递给后端服务器，客户需要在后端服务器上配置TOA插件才能获取客户端源IP。 详细请参见[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)   - 对于开启了Proxy Protocol功能的加速器，GA服务使用 Proxy Protocol协议将客户端源IP传递给后端服务器，客户需要在后端服务器上开启Proxy Protocol功能。   |
       
    
   
 
#### 通过Proxy Protocol协议获取客户端源IP
本节以终端节点类型为EIP，后端服务使用Nginx为例，介绍如何开启Proxy Protocol功能，并查看已获取的客户端源IP。
1. [提交工单](https://console.huaweicloud.com/ticket/?locale=zh-cn#/ticketindex/serviceTickets)，开启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。 ![](https://support.huaweicloud.com/bestpractice-ga/zh-cn_image_0000002160682306.png "点击放大")
   
 
