智能全球加速充当了客户端和您的应用程序之间的七层、四层、三层代理。默认情况下,您的应用程序接收到的源 IP 地址是位于终端节点区域的边缘节点的 IP 地址,而非原始客户端的 IP。然而,许多应用程序的运行依赖真实的客户端 IP。例如,基于 IP 的访问控制、限流、流量分析。
智能全球加速为七层加速、四层加速提供基于不同技术的保持客户端源IP的实现方式:
| 加速层级 | 保持客户端源IP方式 |
|---|---|
| 七层加速 | 在回源请求中添加 X-Forwarded-For 、X-Real-IP 请求头来传递客户端真实 IP。 |
| 四层加速 | 利用 Proxy Protocol 在 TCP 及 UDP 数据包的有效载荷(Payload)头部添加 Proxy Protocol 头部,用来传递客户端原始 IP 及端口。 |
对于四层加速的客户端源IP地址保留,智能全球加速支持以下 Proxy Protocol 版本:
说明
对于基于 UDP 协议的流量,全球加速允许 UDP 数据报中 Payload 长度上限为 1380 字节。但由于 Proxy Protocol v2 头部需要占用额外的 Payload 字节,IPv4 是 28 字节,IPv6 是 52 字节,您需要将客户端发送的 UDP 数据报中 Payload 的数据量控制在更小的值。
对于四层加速,保持客户端源 IP 的配置位于监听器上。您可以通过配置目标监听器来开启该功能。具体步骤如下:
您的后端服务器需要支持解析 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。 #... } } nginx
您可以配置 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'; } nginx
通过tail -n 5 <日志路径> 命令查看日志信息,日志中每条访问记录的第一个 IP 地址即为客户端源 IP。将获取到的 IP 地址和客户端原始的 IP 对比验证服务器是否取到了客户端原始 IP。