您可以通过传统型负载均衡CLB的四层监听获取客户端真实IP地址。
背景信息
正常情况下,对于四层负载均衡,在后端服务器上获取的源IP即为客户端真实IP。但如果对客户端IP地址做了NAT转换,则后端服务器无法直接获取客户端的真实IP。CLB四层监听支持通过Proxy Protocol携带原始连接信息(源IP、目的IP、源端口、目的端口等)添加到TCP数据头中且不会丢弃或覆盖任何原有数据,CLB仅支持Proxy Protocol v2版本。更多信息,请参见The PROXY protocol。
适用场景
通过Proxy Protocol获取客户端真实IP适用于场景:CLB实例IP类型为IPv6,后端服务器的IP类型为IPv4。
前提条件
- 启用Proxy Protocol之前,请确保您的后端服务器支持Proxy Protocol v2版本,否则会导致新建连接失败。
Nginx Plus R16及以后版本或者开源Nginx 1.13.11及以后版本支持Proxy Protocol v2版本。
- 如果实例的多个CLB监听挂载同一组后端服务器,必须将所有实例的监听都开启Proxy Protocol功能。
步骤一:创建TCP或UDP监听
步骤二:为后端服务器的监听服务开启Proxy Protocol
在监听开启Proxy Protocol 后,后端服务器的监听服务也需要开启Proxy Protocol,否则将出现转发不通或健康检查失败等问题。
登录后端服务器,执行以下命令,配置Proxy Protocol获取源地址功能。http {
#...
server {
listen 80 proxy_protocol;
listen 443 ssl proxy_protocol;
#...
}
}
stream {
#...
server {
listen 12345 proxy_protocol;
#...
}
}
步骤三:获取客户端真实源IP地址
- 携带客户端IPv4地址的Proxy Protocol v2二进制头格式如下所示:
- 携带客户端IPv6地址的Proxy Protocol v2二进制头格式如下所示: