You need to enable JavaScript to run this app.
导航

保持客户端源 IP

最近更新时间2024.03.21 12:01:02

首次发布时间2022.05.27 19:16:03

您使用全球加速服务时,系统默认后端服务器不获取客户端源 IP 。根据业务情况,如果需要后端服务器获取客户端源 IP ,您可以开启保持客户端源 IP 功能。

保持客户端源 IP 概览

当前 TCP 协议支持保持客户端源 IP 功能,后端服务部署具体如下:

后端服务部署地

后端服务类型

获取客户端 IP 方法

火山引擎

EIP

  • 自动获取(仅适用于后端部署于火山引擎场景)
    • 仅支持 TCP 协议,通过 TOA(TCP Option Address)传递客户端 IP,后端服务无需做任何改动。
    • IPv4 客户端访问后端服务时,推荐使用此方式。
  • Proxy Protocol v1
    • 仅支持 TCP 协议,通过为报文添加 Proxy Protocol v1 报头( ASCII 码格式)传递客户端源 IP 。
    • 如果后端服务器不支持解析Proxy Protocol,则后端服务器无法正确解析请求。需后端服务适配 Proxy Protocol 协议
    • IPv6 客户端访问后端服务时,推荐使用此方式。
  • Proxy Protocol v2
    • 支持 TCP/UDP 协议,通过报文添加 Proxy Protocol v2 报头(二进制格式)传递客户端源 IP 。
    • 如果后端服务器不支持解析Proxy Protocol,则后端服务器无法正确解析请求。需后端服务适配 Proxy Protocol 协议
    • IPv6 客户端访问后端服务时,推荐使用此方式。

    说明

    对于 UDP 协议,报文添加Proxy Protocol v2 报头后的可用 payload 长度上限为1380。

ECS

非火山引擎

自定义 IP

  • Proxy Protocol v1
    • 仅支持 TCP 协议,通过为报文添加 Proxy Protocol v1 报头( ASCII 码格式)传递客户端源 IP 。
    • 如果后端服务器不支持解析Proxy Protocol,则后端服务器无法正确解析请求。需后端服务适配 Proxy Protocol 协议
    • IPv6 客户端访问后端服务时,推荐使用此方式。
  • Proxy Protocol v2
    • 支持 TCP/UDP 协议,通过报文添加 Proxy Protocol v2 报头(二进制格式)传递客户端源 IP 。
    • 如果后端服务器不支持解析Proxy Protocol,则后端服务器无法正确解析请求。需后端服务适配 Proxy Protocol 协议
    • IPv6 客户端访问后端服务时,推荐使用此方式。

    说明

    对于 UDP 协议,报文添加Proxy Protocol v2 报头后的可用 payload 长度上限为1380。

自定义域名

开启保持客户端源 IP

您可以在为加速器配置监听过程中,在 监听 > 终端节点组 标签页开启保持客户端源 IP ,也可以在对未开启保持客户端源 IP 的终端节点开启此功能。

说明

如果您想为某一终端节点开启保持客户端源 IP ,请确认该终端节点与哪一加速器的监听相关联。

  1. 登录火山引擎全球加速控制台
  2. 在控制台左侧导航栏,点击 全球加速服务 > 加速器管理 > 标准型加速器列表
  3. 标准型加速器列表 页面,点击待配置加速器名称。
  4. 点击 监听 ,进入 监听 页面后,选择待配置监听器,点击 查看节点组
  5. 终端节点组 标签页,选择待配置终端节点组名称,在 操作 栏点击 编辑
  6. 编辑终端节点组 标签页,开启 保持客户端源 IP ,根据您的后端服务部署地和监听协议,确定获取保持客户端源 IP 的方法,确认配置后,点击 确认 ,完成保持客户端源 IP 。

后端服务适配 Proxy Protocol 协议

后端服务部署在非火山引擎上时,您的后端服务器需要支持解析Proxy Protocol ,才能获取客户端源 IP 。以 Nginx 为例,配置 Nginx 只需将参数 proxy_protocol 添加在 server 块中的 listen 指令后。

http {
    #...
    server {
        listen 80 proxy_protocol;    #在80端口,开启解析proxy protocol。
        #...
    }
}
   
stream {
    #...
    server {
        listen 8080 proxy_protocol;    #在8080端口,开启解析proxy protocol。
        #...
    }
}

查看客户端源 IP

您可在 Nginx 日志中查看客户端源 IP ,具体步骤如下:

  1. 设置http{}模块和stream{}模块的日志格式添加保存客户端源IP的变量proxy_protocol_addr。,将客户端源IP信息保存到日志中。
http {
    #...
    log_format combined '$proxy_protocol_addr - $remote_user [$time_local] ' 
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';
}
#...
stream {
    #...
    log_format basic '$proxy_protocol_addr - [$time_local] '                 
                      '$protocol $status $bytes_sent $bytes_received '
                      '$session_time';
}
  1. 通过tail -n -5 <日志路径>命令查看日志信息,日志信息中的第一个 IP 地址即为客户端源 IP。