webman阿里云负载均衡获取真实IP问题

Sumr

使用:

$info1 = $request->getRealIp();
$info2 = $request->getRemoteIp();

获取的都是阿里云的内网IP,怎样获取真实的客户端IP

1598 1 2
1个回答

Tinywan

截图

  • Sumr 2022-04-06

    这个已经配置了 也不行

  • walkor 2022-04-06

    打印下$request->header(),里面应该包含了真实IP

  • Sumr 2022-04-06

    可以了。确实在$request->header()里面。感谢~

  • walkor 2022-04-06

    请问具体是哪个header里?

  • Tinywan 2022-04-06

    应该是 $request->header()['HTTP_X_FORWARDED_FOR']

  • Tinywan 2022-04-06

    获取真实的是哪一个

  • Sumr 2022-04-06

    我在控制器里面传入的$request->header()获取的。

    demo:
    public function get(Request $request)
    {
    $res = $request->header();
    return json(['data'=>$res]);
    }

    结果:
    {\"remoteip\":\"IP地址\",\"host\":\"域名\",\"x-forwarded-for\":\"IP地址\",\"connection\":\"close\",\"content-length\":\"0\",\"content-type\":\"application\/x-www-form-urlencoded\",\"user-agent\":\"EOLINKER\",\"accept\":\"\/\",\"eo-token\":\"d8ded4e6-2e77-4db5-9490-979916827cf9\",\"slb-ip\":\"IP地址\"}

  • walkor 2022-04-06

    用 $request->getRealIp();应该能获取真实ip,$request->getRealIp()会自动判断,如果是内网ip,尝试获取x-forwarded-for的值作为ip。

  • Sumr 2022-04-07

    尝试了一下,在测试服务器上$request->getRealIp()确实可以,但是正式环境用的阿里云的负载均衡就不行了,需要用$request->header()获取

  • walkor 2022-04-07

    正式环境阿里云的负载均衡$request->getRealIp()获取的ip前半段是?

  • Sumr 2022-04-07

    是内网IP 100.120. .

  • = - = 2022-04-07

    那是哪个 header 头呢?是 SLB-IP 吗?还是 REMOTE-IP,亦或者是 X-FORWARD-FOR 呢?

  • walkor 2022-04-07

    用 $request->getRealIp(false); (有个false参数)获取。
    或者 $request->header('x-forwarded-for');

    下个版本1.3.10(还没发布)可以直接用 $request->getRealIp(); 获取。

  • Sumr 2022-04-07

    好的,我修改下

年代过于久远,无法发表回答
🔝