您使用全球加速服务时,系统默认后端服务器不获取客户端源 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 ,请确认该终端节点与哪一加速器的监听相关联。
- 登录火山引擎全球加速控制台。
- 在控制台左侧导航栏,点击 全球加速服务 > 加速器管理 > 标准型加速器列表 。
- 在 标准型加速器列表 页面,点击待配置加速器名称。
- 点击 监听 ,进入 监听 页面后,选择待配置监听器,点击 查看节点组 。
- 在 终端节点组 标签页,选择待配置终端节点组名称,在 操作 栏点击 编辑 。
- 在 编辑终端节点组 标签页,开启 保持客户端源 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 ,具体步骤如下:
- 设置
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';
}
- 通过
tail -n -5 <日志路径>
命令查看日志信息,日志信息中的第一个 IP 地址即为客户端源 IP。