本文为您介绍了如何从源站获取客户端IP。
获取方式介绍
经过加速后源站的服务器获取到的客户端IP地址为CDN加速设备的IP地址。如果您需要从源站获取客户端IP地址,有如下两种方式:
- Linux系统安装toa内核模块,使用方便且对应用完全透明,无需修改源站Linux服务器的应用程序即可获取真实客户端IP。
- Proxy Protocol(本文简称PP),对系统内核没有要求,需要应用程序配合修改,通过解析文本字符串获取客户端IP。目前,Nginx和HAProxy已经支持。
安装toa模块
如果源站的入口系统是Linux系统,并且版本符合要求,可以通过安装toa模块的RPM包来获取用户客户端IP。
支持的Linux版本 | RPM包下载 |
---|---|
CentOS 6.5 | CentOS 6.5 RPM |
CentOS 6.9 | CentOS 6.9 RPM |
CentOS 7.0 | CentOS 7.0 RPM |
CentOS 7.2 | CentOS 7.2 RPM |
CentOS 7.3 | CentOS 7.3 RPM |
CentOS 7.4 | CentOS 7.4 RPM |
CentOS 7.5 | CentOS 7.5 RPM |
alicdn.alios7 | alicdn.alios7 RPM |
-
通过
rpm
指令安装对应版本的包。rpm -ivh tcp-toa-1.2.7-alicdn.alios7.x86_64.rpm
Preparing... ################################# [100%] Updating / installing... 1:tcp-toa-1.2.7-alicdn.alios7 ################################# [100%]
- 运行toa模块。
service tcp_toa start
[Starting tcp_toa]: Checking installed modules... tcp_toa not installed. Checking module files... [OK] Installing tcp_toa... [OK]
- 查看toa模块运行状态。
lsmod | grep toa
tcp_toa 12916 0
- 停止toa模块。
service tcp_toa stop
[StoPPing tcp_toa]: Checking installed modules... tcp_toa installed. Checking installed tcp_toa... [OK] Uninstalling tcp_toa... [OK]
- 您可以通过输入
rpm -e tcp-toa
卸载toa模块。rpm -e tcp-toa
[StoPPing tcp_toa]: Checking installed modules... tcp_toa installed. Checking installed tcp_toa... [OK] Uninstalling tcp_toa... [OK]
Proxy Protocol
PP方式获取IP需要在控制台配置进行使用,功能打开后,加速服务器和源站建立TCP连接,在传输第一个用户payload前,会传递PP协议文本。
配置Nginx接受PP,只需要将参数proxy_protocol添加在server
块中的listen
指令后,详情请参见Accepting the PROXY Protocol。
http {
#...
server {
listen 80 proxy_protocol;
listen 443 ssl proxy_protocol;
#...
}
}
说明 其他支持PP的应用请参见Proxy Protocol。
不支持PP的应用程序,需要在TCP连接建立后,读取PP的文本行并进行字符串解析来获取客户端IP,字符示例如下所示。
PROXY TCP4 10.10.10.10 192.168.0.1 12345 80\r\n
解析时先读取行直至\n
,在按照协议进行解析,各字段定义如下。
PROXY_STRING + single space + INET_PROTOCOL + single space + CLIENT_IP + single space + PROXY_IP + single space + CLIENT_PORT + single space + PROXY_PORT + "\r\n"
真实输出的PP文本行相对以上格式,在 \r\n
之前可能还包含全局唯一的ID,用于全链路监控,如果不需要您可以忽略它。
"id"="xxxx"