• 欢迎来到小爱博客,一个分享互联网IT技术的网站,喜欢就收藏吧!

nginx获取用户真实IP

nginx 小爱 3个月前 (07-27) 76次浏览 已收录 0个评论 扫描二维码

使用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

如果注释 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地址串如下:
120.22.11.11,61.22.22.22,121.207.33.33,192.168.50.121

在real_ip_recursive on的情况下

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


小爱博客 , 版权所有
转载请注明原文链接:nginx获取用户真实IP
喜欢 (2)
【你的支持, 我的动力】
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址