Php Laravel请求返回负载平衡器ip而不是客户端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') 检查
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吗?