Yii框架如何获取客户端IP_Yii框架真实IP地址获取【技巧】

夜辰酱_5885

夜辰酱_5885

2026-04-27

1043人浏览

原创

yii::app()->request->userhostaddress几乎总是错误的,因它仅读$_server['remote_addr'],在nginx/cdn/slb场景下返回代理内网ip;正确方式是配置ipheaders和trustedhosts后使用getuserip()。

yii框架如何获取客户端ip_yii框架真实ip地址获取【技巧】

Yii::app()->request->userHostAddress 拿到的几乎总是错的——它只读 $_SERVER['REMOTE_ADDR'],在有 Nginx、CDN 或云 SLB 的场景下,这个值是上一跳代理的内网 IP(比如 10.0.1.5),不是用户真实出口 IP。 必须主动配置可信代理和转发头,否则永远拿不到真实 IP。

Yii2 中 getUserIP() 为什么返回 127.0.0.1 或内网地址

这是最常被忽略的安全默认行为:Yii2 的 getUserIP() 默认不信任任何代理,也不会解析 X-Forwarded-For 或 X-Real-IP。它只看 REMOTE_ADDR,而反向代理会把自身 IP 填进去。

  • 确认你是否用了 Nginx:检查 Nginx 配置里有没有 proxy_set_header X-Real-IP $remote_addr; 或 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • 确认云厂商用的头名:腾讯云用 Tencent-Cloud-Real-IP,阿里云 SLB 默认用 X-Forwarded-For,AWS ALB 用 X-Forwarded-For,但需注意多级代理时该头可能含多个 IP
  • 必须同时配 ipHeaders 和 trustedHosts,缺一不可;只加头不设可信段,getUserIP() 会直接忽略那些头

正确配置示例(config/web.php):

'request' => [
    'class' => 'yii\web\Request',
    'ipHeaders' => ['X-Forwarded-For', 'X-Real-IP', 'Tencent-Cloud-Real-IP'],
    'trustedHosts' => ['10.0.0.0/8', '192.168.0.0/16', '172.16.0.0/12'],
],

Yii2 获取真实 IP 的推荐写法:别直接用 userHostAddress

userHostAddress 是只读 REMOTE_ADDR 的快捷属性,完全绕过代理逻辑,等价于裸写 $_SERVER['REMOTE_ADDR']。线上环境务必弃用。

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 统一走 $request->getUserIP(),它会按 ipHeaders 顺序读头,并校验来源 IP 是否在 trustedHosts 内
  • 如果需要兼容性更强的 fallback(比如某些 CDN 不传标准头),可手动补一层判断:$ip = $request->getUserIP() ?: $request->getRemoteIP();
  • getRemoteIP() 是底层方法,返回未经代理校验的 REMOTE_ADDR,仅作兜底,不能当主力

Yii3 使用 PSR-7 ServerRequest 时怎么取真实 IP

Yii3 彻底移除了 getUserIP() 封装,所有逻辑得自己写。自由度高,但出错率也高——没人帮你校验代理是否可信。

  • 先读头:$request->getHeaderLine('X-Forwarded-For')(自动大小写不敏感)
  • 拆出第一个非私有 IP:array_filter(array_map('trim', explode(',', $xff))),再逐个用 filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) 过滤
  • 必须手写来源 IP 校验:$clientIp = $request->getServerParams()['remote_addr'] ?? '127.0.0.1';,然后判断它是否落在你的内网段(如 10.0.0.0/8)内,只有可信来源才接受其转发的头
  • 别忘了 fallback 到 $clientIp ——当所有头都为空或不可信时,这是唯一能用的值

调试 IP 获取失败的三个关键检查点

线上看到 IP 固定为 127.0.0.1、10.x.x.x 或空字符串,基本就卡在这三处。

  • Nginx(或 CDN)没转发 IP 头:用 curl -H "X-Real-IP: 1.2.3.4" http://your-site.com/test 手动测试头是否透传到底层 PHP
  • trustedHosts 没覆盖实际代理网段:比如 SLB 实际出口是 172.20.10.5,但配置里只写了 192.168.0.0/16,那头就被无视了
  • PHP 运行模式影响 $_SERVER:FastCGI 下部分头可能被 Nginx 截断或重命名,检查 phpinfo() 页面里的 HTTP_X_REAL_IP 是否存在

真实 IP 获取不是“调一个函数就行”的事,它是网络链路、中间件配置、框架安全策略三者对齐的结果。少对一环,拿到的就是假 IP。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii框架 yii

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

11959

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

1146

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

824

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

876

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

3050

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习

Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习