AWS Проблема с IP-адресом реального пользователя Application Load Balancer - PullRequest
0 голосов
/ 29 мая 2020

Я запускаю приложение laravel на AWS Elasticbeanstalk, я использую 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 Ответ

1 голос
/ 29 мая 2020

Вам нужно доверять балансировщикам нагрузки AWS как прокси .

Если вы используете AWS Elasti c Load Balancing, ваш $headers значение должно быть Request::HEADER_X_FORWARDED_AWS_ELB. Для получения дополнительной информации о константах, которые могут использоваться в свойстве $ headers, ознакомьтесь с документацией Symfony по доверенным прокси-серверам.

Если вы используете Amazon AWS или другой «облачный» поставщик балансировщика нагрузки , вы можете не знать IP-адреса своих реальных балансировщиков. В этом случае вы можете использовать *, чтобы доверять всем прокси:

protected $proxies = '*';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...