本文為您介紹了如何從來源站點擷取用戶端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.rpmPreparing... ################################# [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 toatcp_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"