繁体   English   中英

Laravel 请求返回负载均衡器 ip 而不是客户端 ip

[英]Laravel Request returning load balancer ip instead of client ip

当我尝试获取客户端 ip 地址时遇到问题

request()->ip()

它返回给我私人服务器 IP 而不是客户端 IP。

如何避免这种情况可能是什么原因。

问这个问题的原因是我的支付网关需要一个公共 IP 来接受付款

实际上,我在这里找到了一个适用于 Laravel 官方文档中编写的所有环境的解决方案。

有一个称为可信代理App\Http\Middleware\TrustProxies的中间件。

该中间件负责解析代理,它有一个名为proxies的属性。

我只是将proxies属性设置为私有 IP 的数组,它就起作用了。

这是修改后的样子。

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array|string
     */
    protected $proxies = [
        'x.x.x.x',
    ];

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

不要忘记将xxxx替换为您的私有 IP。

现在当我调用以下 function

request()->ip();

它给了我预期的结果。

您可以使用

request()->header('X-Forwarded-For')

并检查您的负载均衡器的配置方式,也许您忘记了 Original IP 和 X-Forwarded-For 标头

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM