通过Nginx获取用户真实IP


nginx配置

location / { proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

如上面配置,接口需要使用的时候获取X-real-ip就可以,但是经过测试以后,发现X-real-ip并不是真实的用户IP,而是Nginx代理服务器的IP,原因就是经过多级代理,$remote_addr是上一级的IP。

 

名词解释

  • $remote_addr
    获取到上一级代理的IP
  • proxy_add_x_forwarded_for
  • 获取到结果例如:(223.104.6.125, 10.10.10.45),第一个是用户的真实IP,第二个是一级代理的IP,依此类

 

通过上面的分析我们可以从proxy_add_x_forwarded_for中获取到用户的真实IP,使用正则匹配获取第一个即可,如下:

location / { proxy_set_header Host $host; set $Real $proxy_add_x_forwarded_for; if ( $Real ~ (\d+)\.(\d+)\.(\d+)\.(\d+),(.*) ){ set $Real $1.$2.$3.$4; } proxy_set_header X-real-ip $Real; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

 

 

也可以通过后台的程序,从请求的header里获取X-Forwarded-For,然后取起一个值即可

 

 

 

嗯,就酱~~

参考:https://blog.csdn.net/qq_28796345/article/details/88685245


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM