这几天开发遇到这样一个问题,使用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 地址范围:

d8007d6fb6b8

然后我们到项目的中间件目录里面找到这个类文件:

app/Http/Middleware/TrustProxies.php

修改里面的这个类属性:protected $proxies;

d8007d6fb6b8

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐