AWS Application Load Balancer实际用户ip问题

时间:2020-05-29 16:40:58

标签: laravel amazon-web-services aws-load-balancer aws-application-load-balancer

我在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中对其进行修复。

1 个答案:

答案 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 = '*';
相关问题