通过proxy-protocol获取客户端真实ip(四层tcp监听)
通过Proxy Protocol获取客户端真实IP(四层TCP监听)
1. 使用场景
正常情况下,对于四层负载均衡,在后端服务器上获取的源IP即为客户端真实IP。但如果对客户端IP地址做了NAT转换,则后端服务器无法直接获取客户端的真实IP。四层TCP监听支持通过Proxy Protocol携带原始连接信息(源IP、目的IP、源端口、目的端口等)添加到TCP数据头中且不会丢弃或覆盖任何原有数据。本功能仅支持Proxy Protocol v2版本。
2. 前提条件
- 启用Proxy Protocol之前,请确保您的后端服务器支持Proxy Protocol v2版本,否则会导致新建连接失败;
Nginx Plus R16及以后版本或者开源Nginx 1.13.11及以后版本支持Proxy Protocol v2版本; - 如果实例的多个监听挂载同一组后端服务器,必须将所有实例的监听都开启Proxy Protocol功能;
- 开启获取客户端真实IP设置创建的TCP监听器不可关闭获取设置。如需修改,请重新创建不开启此配置的监听器,并重新配置后端服务器。
3. 步骤一:创建TCP监听器
登录云控制台,在【负载均衡】列表中,点击创建好的实例ID,进入负载均衡详情页面;
在“监听器”选项卡下,点击【创建监听器】,并选择TCP监听器;
ProxyProtocol配置:填写监听器基本配置信息,勾选“通过ProxyProtocol携带客户端源IP到后端服务器”的选项,创建监听器。
4. 步骤二:为后端服务器的监听服务开启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;
#...
}
}
5. 步骤三:获取客户端真实源IP地址
携带客户端源地址的Proxy Protocol v2二进制头格式如下所示: