我们都知道,在Nginx中,想获取来源的IP,我们可以通过$remote_addr
来获取,但是很多时候,请求会经过多个中间代理或CDN,从而导致我们根本无法准确的获取客户端的真实IP, 为解决这种问题,Nginx提供了realip模块来实现客户端IP的获取,详细信息参见:ngx_http_realip_module
此模块提供了三个指令:set_real_ip_from
, real_ip_header
,real_ip_recursive
,其功能如下:
- set_real_ip_from:指定IP的来源信息,用于排除中间代理IP,可以填写IP或网段。
- real_ip_header:指定从Header的哪个属性里面取IP信息,常用的是
X-Forwarded-For
- real_ip_recursive:是否递归的排除中间代理IP信息,默认值为off,如果值设置为off,则只会排除直接上层代理的IP信息,如果值为on,则会从右至左依次排除用户配置的中间IP,直到遇到第一个非指定的IP,将此IP设置为真实IP。
虽然只有三个指令,但是其功能都是比较晦涩难懂的,下面我通过一个实验,来揭示此模块的功能及用法:
实现环境:
-
访问源IP:10.38.160.252
-
代理