Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel请求返回负载平衡器ip而不是客户端ip_Php_Laravel - Fatal编程技术网

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

Php Laravel请求返回负载平衡器ip而不是客户端ip,php,laravel,Php,Laravel,当我尝试获取客户端ip地址时,我遇到了一个问题 request()->ip() 它返回给我私有服务器IP而不是客户端IP 如何避免这种情况,可能的原因是什么 问这个问题的原因是我的支付网关需要一个公共IP来接受您可以使用的支付 request()->header('X-Forwarded-For') 并检查负载平衡器的配置情况,也许您忘记了可以使用的原始IP和X-Forwarded-For标头 request()->header('X-Forwarded-For') 检查

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

request()->ip()
它返回给我私有服务器IP而不是客户端IP

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

问这个问题的原因是我的支付网关需要一个公共IP来接受您可以使用的支付

request()->header('X-Forwarded-For')
并检查负载平衡器的配置情况,也许您忘记了可以使用的原始IP和X-Forwarded-For标头

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

检查一下您的负载平衡器是如何配置的,也许您忘记了原始的IP和X-Forwarded-For报头

我实际上找到了一个在Laravel官方文档中编写的所有环境下都能工作的解决方案

有一种中间件称为trusted proxies App\Http\middleware\TrustProxies

这个中间件负责解析代理,它有一个称为代理的属性

我只是将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;
}


它给了我预期的结果。

我实际上找到了一个在Laravel官方文档中编写的所有环境下都能工作的解决方案

有一种中间件称为trusted proxies App\Http\middleware\TrustProxies

这个中间件负责解析代理,它有一个称为代理的属性

我只是将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;
}


它给了我预期的结果。

感谢@Dry7我尝试了这种方法,它解决了生产上的问题,但在本地和测试ENV返回null。感谢@Dry7我尝试了这种方法,它解决了生产上的问题,但在本地和测试ENV返回null。要确认,x.x.x.x应该是负载平衡器的私有IP?要确认,x.x.x.x应该是负载平衡器的专用IP吗?