Laravel提交评论表单用$request->ip()获取IP为::1的原因是什么?
问题原因分析
- 你拿到的
::1是IPv6协议下的本地回环地址,等效于IPv4的127.0.0.1,本地测试环境下拿到这个值是完全正常的,你的核心代码逻辑没有问题。 - 如果部署到线上服务器后依然无法拿到真实用户IP,通常是服务前面配置了反向代理(Nginx、CDN、负载均衡等),Laravel默认不会信任代理服务传递的客户端IP头,需要额外配置信任代理规则。
线上环境修复方案
修改app/Http/Middleware/TrustProxies.php文件:
- 如果你确定服务完全运行在代理层之后,可以直接将
$proxies属性设置为*,信任所有代理传递的IP头; - 安全要求更高的场景可以把
$proxies的值设置为你的反向代理服务的真实IP段,避免伪造IP的风险。
本地验证方法
你可以用同一局域网内的其他设备(手机、其他电脑),通过你主机的局域网IP访问服务提交评论,此时拿到的IP会是对应设备的局域网地址(比如192.168.xxx.xxx),可以确认$request->ip()的逻辑是生效的。
内容的提问来源于stack exchange,提问作者user16993770
相关产品推荐
相关产品推荐

