
文章插图
使用Nginx自带模块realip获取用户IP地址
yum或者apt安装的都会默认有这个模块
真实服务器nginx配置
server { listen 80; server_name www.qq.com; access_log /data/logs/nginx/www.qq.com.access.log main;index index.php index.html index.html; root /data/site/www.qq.com;location / { root /data/site/www.qq.com; } location = /getRealip.php { set_real_ip_from 192.168.50.0/24; set_real_ip_from 61.22.22.22; set_real_ip_from 121.207.33.33; set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; real_ip_recursive on; fastcgi_pass unix:/var/run/phpfpm.sock; fastcgi_index index.php; include fastcgi.conf; } }getRealip.php内容
<?php $ip = $_SERVER['REMOTE_ADDR']; echo $ip;?>访问www.qq.com/getRealip.php,返回:
120.22.11.11 【nginx使用set_real_ip_from获取用户真实IP】如果注释 real_ip_recursive on或者 real_ip_recursive off
访问www.qq.com/getRealip.php,返回:
121.207.33.33很不幸,获取到了中继的IP,real_ip_recursive的效果看明白了吧.
- set_real_ip_from:真实服务器上一级代理的IP地址或者IP段,可以写多行
- real_ip_header:从哪个header头检索出要的IP地址
- real_ip_recursive:递归排除IP地址,ip串从右到左开始排除set_real_ip_from里面出现的IP,如果出现了未出现这些ip段的IP,那么这个IP将被认为是用户的IP 。例如我这边的例子,真实服务器获取到的IP地址串如下:
61.22.22.22,121.207.33.33,192.168.50.121都出现在set_real_ip_from中,仅仅120.22.11.11没出现,那么他就被认为是用户的ip地址,并且赋值到remote_addr变量
在real_ip_recursive off或者不设置的情况下
192.168.50.121出现在set_real_ip_from中,排除掉,接下来的ip地址便认为是用户的ip地址
如果仅仅如下配置:
set_real_ip_from 192.168.50.0/24; set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; real_ip_recursive on;访问结果如下:
121.207.33.33总结:real_ip_recursive on 这个参数一定要打开才能获取到真实用户ip
推荐阅读
- H3C交换机SSH配置完全攻略
- 腾讯API 地图相关使用
- 抖音直播间人气卡怎么使用 抖音直播开卡片什么意思
- 70年产权”并不是指房屋使用年限,商业拆迁补偿是住宅的3倍!
- iPhone通讯录,批量删除联系人方法
- 华为荣耀手机备忘录超全使用小技巧
- 使用HTML和Vuejs进行表单验证
- 使用redis作为消息队列的用法
- 经常使用电脑喝什么茶
- 绿茶冰肌清洁泥膜如何使用[绿茶]
