Запрос Laravel возвращает ip балансировщика нагрузки вместо ip клиента - PullRequest
0 голосов
/ 09 ноября 2019

Я сталкиваюсь с проблемой при получении IP-адреса клиента, когда я пытаюсь

request()->ip()

Он возвращает мне IP-адрес частного сервера вместо IP-адреса клиента.

Что может быть возможнымпричина, как этого избежать.

Причина, по которой стоит задать этот вопрос, заключается в том, что моему платежному шлюзу нужен общедоступный IP-адрес для приема платежей

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вы можете использовать

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

и проверить, как настроен ваш балансировщик нагрузки, может быть, вы забыли про оригинальный IP и заголовки X-Forwarded-For

0 голосов
/ 10 ноября 2019

Я действительно нашел решение, которое работало во всех средах, написанных в официальной документации Laravel здесь .

Существует промежуточное ПО, называемое доверенными прокси App\Http\Middleware\TrustProxies.

ЭтоПромежуточное программное обеспечение отвечает за разрешение прокси, оно имеет свойство proxies.

Я просто установил свойство 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;
}

Не забудьте заменить x.x.x.x на ваш личный IP.

Теперь, когда я вызвал следующую функцию

request()->ip();

Это дало мне ожидаемый результат.

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