这几天开发遇到这样一个问题,使用laravel 框架自带的 $reqeust->ip(); 方法获取到的客户端 ip 地址不准确,所以我就在网上查了一些方法看如何解决,有写的好的大神,讲的非常的详细,这里我就不照搬人家的东西了,感兴趣的小伙伴可以自己去看一下这里是具体地址: Laravel中获取真实ip - 简书 也是简书的一位书友写的。
本着实用至上,我就略过具体的知识点直接讲我遇到的问题和如何解决的:
1,获取 IP 地址不准的原因:
答:因为我的项目服务器使用了 cloud flare 的节点加速,这样不同地区访问的我项目的时候,我如果直接使用 laravel 自带的 $request->ip(); 获取到的 IP 地址其实是 cloud flare 加速节点的地址,例如中国区的加速节点地址就是 198.42.129.0/22 (假的,举例) 这个范围的 IP 地址,而不是来自中国区真正的 IP 地址。
2,laravel >=5.5* 框架中如何解决这个问题?
答:此套配置只对 laravel 版本大于 5.5 的项目有用,我获取到了我的 cloud flare 加速节点所有地址的节点 ip 地址范围:

然后我们到项目的中间件目录里面找到这个类文件:
app/Http/Middleware/TrustProxies.php
修改里面的这个类属性:protected $proxies;

如图所示,我们把 cloud flare 加速节点的地址都放到一个数组里然后赋值给 $proxies 属性,这样我们再次使用 $request->ip() 方法获取客服端 ip 地址的时候就不会获取到加速节点的 ip 地址了。
网友评论