- 首先,我们要让 Nginx 包含 http_realip_module 模块
- 然后在 nginx.conf 的 http 里设置已知的 CDN 节点 IP 段,如下:
#获取开启 CDN 后访客真实IP #CloudFlare节点 for IPv4 set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 108.162.192.0/18; set_real_ip_from 190.93.240.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 162.158.0.0/15; set_real_ip_from 104.16.0.0/13; set_real_ip_from 104.24.0.0/14; set_real_ip_from 172.64.0.0/13; set_real_ip_from 131.0.72.0/22; #CloudFlare节点 for IPv6 set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2a06:98c0::/29; set_real_ip_from 2c0f:f248::/32; #上海云盾国内节点 set_real_ip_from 27.221.64.0/24; set_real_ip_from 27.221.68.0/24; set_real_ip_from 42.49.13.0/24; set_real_ip_from 42.236.6.128/27; set_real_ip_from 49.232.85.76/32; set_real_ip_from 58.222.57.0/24; set_real_ip_from 59.56.19.0/24; set_real_ip_from 59.56.78.0/24; set_real_ip_from 59.56.79.0/24; set_real_ip_from 60.163.162.32/27; set_real_ip_from 101.69.181.0/24; set_real_ip_from 103.95.220.0/25; set_real_ip_from 103.95.221.0/24; set_real_ip_from 103.136.251.0/24; set_real_ip_from 103.219.29.64/26; set_real_ip_from 111.2.127.0/24; set_real_ip_from 111.61.59.0/24; set_real_ip_from 115.231.230.0/24; set_real_ip_from 116.136.249.0/24; set_real_ip_from 116.177.238.0/24; set_real_ip_from 117.34.43.0/24; set_real_ip_from 118.121.192.0/24; set_real_ip_from 120.53.244.232/32; set_real_ip_from 120.220.20.0/24; set_real_ip_from 122.9.54.0/24; set_real_ip_from 122.226.191.192/26; set_real_ip_from 125.44.163.0/24; set_real_ip_from 129.28.193.74/32; set_real_ip_from 153.35.236.0/24; set_real_ip_from 171.111.155.0/24; set_real_ip_from 175.6.227.128/26; set_real_ip_from 183.47.233.64/26; set_real_ip_from 183.131.145.0/24; set_real_ip_from 183.131.200.0/24; set_real_ip_from 183.134.17.0/27; set_real_ip_from 183.221.215.0/24; set_real_ip_from 183.232.187.0/24; set_real_ip_from 183.249.20.0/24; set_real_ip_from 223.111.172.0/24; set_real_ip_from 223.68.10.0/24; #上海云盾海外节点 set_real_ip_from 45.159.59.0/24; set_real_ip_from 85.237.218.0/24; set_real_ip_from 103.100.71.0/24; set_real_ip_from 103.112.3.0/24; set_real_ip_from 117.18.111.128/25; set_real_ip_from 128.1.170.0/24; set_real_ip_from 129.227.63.0/24; set_real_ip_from 156.241.6.0/24; set_real_ip_from 161.117.85.73/32; set_real_ip_from 164.88.96.0/24; set_real_ip_from 164.88.98.0/24; set_real_ip_from 202.181.144.128/25; set_real_ip_from 206.119.114.192/26; set_real_ip_from 206.119.110.192/26; set_real_ip_from 206.119.109.192/26; set_real_ip_from 206.119.108.192/26; set_real_ip_from 216.177.129.0/24;
- 然后下面紧跟开启 http_realip_module 模块的获取真实 IP 开关并传递用户 IP,如下:
real_ip_header X-Forwarded-For; real_ip_recursive on;
X-Forwarded-For 这个 header 信息,用于记录此请求所进过的 ip,假设本 nginx 为第 3 层代理,那么获取到的 X-Forwarded-For 就会记录 3 个 ip,分别顺序为:用户 IP、第一层代理 IP、第二层代理 IP; 这时候就会用到real_ip_recursive参数,如果此参数不开启,就会从右往左,取第一个出现在信任中的 IP 的左边一位的 IP 作为$remote_addr,我们这里是全信任,所以就会取到第一层代理 IP,这明显就并不一定对。如果开启了 real_ip_recursive,那么就会从右边往左一直取到第一个不信任的 IP 作为$remote_addr,如果像我这里是全部信任,那么最左边的 IP 则会被作为$remote_addr。
至此我们在 Nginx 层面已经获取到了访客的真实 IP 了,大家可以实时跟踪观察一下站点日志,自己再访问一下,看到自己的 IP 在日志里出现记录就表明成功了。
© 版权声明
THE END
暂无评论内容