request()->ip()总返回内网ip是因为默认仅信任127.0.0.1和::1,未配置trusted_proxies时,框架忽略x-real-ip等头,直接取$_server['remote_addr'](即nginx/slb内网地址);必须在config/app.php中显式配置可信代理cidr段(如'10.0.0.0/8'、'100.64.0.0/10'),并与nginx proxy_set_header x-real-ip $remote_addr严格对齐,否则无法解析真实客户端ip。
ip为什么不准确">
request()->ip() 为什么总返回内网 IP
因为默认只信任 127.0.0.1 和 ::1,线上所有真实流量经过 Nginx、SLB 或 CDN 后,$_SERVER['REMOTE_ADDR'] 就变成了网关的内网地址(比如 10.10.20.5),而框架没被告知“哪些 IP 是可信代理”,就直接跳过 X-Real-IP 等头字段,不解析也不校验。
- 不是函数写错了,是配置缺失:
trusted_proxies没设,等于告诉框架“除了本机,其他全是不可信来源” - 即使 Nginx 配了
proxy_set_header X-Real-IP $remote_addr;,只要request()->ip()不知道该信任谁,就不会去读这个 header - 云厂商 SLB 回源段(如阿里云
100.64.0.0/10)、K8s Service 网段、公司 IDC 内网段,都得手动加进配置里
trusted_proxies 怎么配才有效
必须按实际部署环境填 CIDR 段,不能只写单个 IP;且要和 Nginx / LB 的真实出口 IP 段严格对齐,否则要么取不到真实 IP,要么被伪造头绕过。
- 在
config/app.php中添加:'trusted_proxies' => ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', '100.64.0.0/10'](最后一个是阿里云 SLB 常见回源段) - 不要写成
['10.0.0.1', '10.0.0.2']—— 单 IP 不支持 CIDR 解析,会被忽略 - 如果用了多层代理(比如 CDN → SLB → Nginx → PHP),只配最外层可信 IP 段即可;中间层若也透传头,需确保它们不会篡改或重复追加
X-Forwarded-For - 配完重启 FPM 或清空 runtime/cache,否则缓存旧配置会持续生效
为什么不能直接用 $_SERVER['HTTP_X_REAL_IP']
因为这个值完全由客户端或任意中间节点控制,没做来源校验就直接取,等于把风控开关交给了攻击者。
- 恶意请求可以伪造
X-Real-IP: 1.1.1.1,只要你的 Nginx 没做underscores_in_headers off或没限制 header 来源,这个值就会进 PHP -
request()->ip()的安全逻辑在于:先确认$_SERVER['REMOTE_ADDR']是否落在trusted_proxies列表里,再决定是否采信它传来的X-Real-IP - 绕过框架直接读
$_SERVER,等于跳过整套代理链校验,等同于裸奔 - 更危险的是读
$_SERVER['HTTP_X_FORWARDED_FOR']—— 它可被客户端随意拼接,例如X-Forwarded-For: 1.2.3.4, 5.6.7.8, 127.0.0.1,取第一个就是假 IP
IP 统计前必须做的脱敏与校验
拿到 IP 后别急着入库,真实场景中大量 IP 是私有地址、保留地址或明显异常值,直接统计会污染数据。
- 用
filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)排除127.0.0.0/8、10.0.0.0/8、169.254.0.0/16等无效段 - IPv6 地址需先转为规范格式(如
::1→0000:0000:0000:0000:0000:0000:0000:0001),否则哈希或去重会出错 - 日志或数据库存 IP 时建议脱敏:保留前两段(如
112.65.xxx.xxx),避免违反《个人信息保护法》对“可识别自然人”的定义 - 异步记录,别在主流程里调 DB 或 Redis —— IP 提取本身应是轻量操作,阻塞会影响接口性能
真正容易被忽略的点是:*trusted_proxies 配置后,Nginx 的 proxy_set_header 必须与之匹配,且不能让前端页面或 App 直接透传任何 X- 头到服务端**。一旦代理链中某一层没过滤 header,整个校验逻辑就形同虚设。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











