我在AWS Elasticbeanstalk上运行laravel应用程序,我使用Application Load Balancer。
Route::get('/what-is-my-ip', function(){
return request()->ip();
});
运行此代码时,我的IP不显示,而是显示负载均衡器的IP地址。
在cloudflare中使用了相同问题的人也有经验,并为cloudflare提供了解决方案,但是我找不到适用于AWS Application Load Balancer的解决方案。
我在获取用户的IP地址并在维护模式下添加--allow-ip时遇到麻烦。
function real_IP() {
$real_IP = '';
if (getenv('HTTP_CLIENT_IP'))
$real_IP = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$real_IP = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$real_IP = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$real_IP = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$real_IP = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$real_IP = getenv('REMOTE_ADDR');
else
$real_IP = 'UNKNOWN';
return $real_IP;
}
当我运行此代码时,它会提供正确的IP地址,我想在laravel中对其进行修复。
答案 0 :(得分:1)
您需要trust the AWS load balancers as a proxy。
如果您正在使用AWS Elastic Load Balancing,则您的
$headers
值应为Request::HEADER_X_FORWARDED_AWS_ELB
。有关$ headers属性中可能使用的常量的更多信息,请查阅Symfony关于信任代理的文档。如果您使用的是Amazon AWS或其他“云”负载均衡器提供商, 您可能不知道实际平衡器的IP地址。在这个 情况下,您可以使用*信任所有代理:
protected $proxies = '*';