CDN 环境下获取用户IP方法
-
1 cdn 自定义header头的X-Real-IP,在后端使用$http_x_real_ip获得
proxy_set_header X-Real-IP $remote_addr
这种方法简单有效准确.
-
2 cdn一般都会使用自定义字段X-Forwarded-For记录代理过程信息
例如: 假设加上cdn代理在内的所有代理后的$http_x_forwarded_for为:
192.168.247.1, 192.168.247.131, 192.168.247.132,192.168.96.111
我们可以拿到第一个IP即可(这里不考虑IP伪造的情况)
-
3 使用nginx自带模块realip获取用户IP地址
如果nginx是通过源码包安装的,在编译时需要加上
--with-http_realip_module
在最后一台代理服务器(nginx)做如下设置:
real_ip_header "X-Forwarded-For"; 设定获取ip地址串的字段
real_ip_recursive on; 递归check地址串
set_real_ip_from 192.168.247.131; 在check地址串的过程中pass掉它
set_real_ip_from 192.168.247.132; 在check地址串的过程中pass掉它
set_real_ip_from 192.168.96.111; 在check地址串的过程中pass掉它
这个例子中只有192.168.247.1没有在set_real_ip_from中那我们就默认它是用户IP
缺点:ip地址有可能被伪装,而且需要知道所有CDN(代理)节点的ip地址或者ip段