Запрос Symfony и обратный прокси - PullRequest
4 голосов
/ 10 августа 2011

У меня есть apache2 и nginx.Я устанавливаю "доверенные заголовки прокси" в настройках на true, но в любом случае получаю внутренний ip при вызовах $request->getClientIp(); Что я делаю не так?

Если я звоню getClientIp с параметром $proxy = true, то получаю правильный IP.Но есть конфигурация, в которой включены заголовки прокси, не так ли?

Ответы [ 2 ]

1 голос
/ 07 марта 2012

На самом деле это проблема, исправленная этим слиянием https://github.com/symfony/symfony/commit/40599ec0a24e688ef5903e2bd3cfb29b5ab29a18

0 голосов
/ 11 августа 2011

Вкратце: вам всегда нужно использовать $proxy = true, если вы планируете использовать какой-то обратный прокси.Если этот параметр установлен (и trustProxyData(); включен), $this->getClientIp(); вернет правильный IP-адрес с обратным прокси.

Объяснение: даже после настройки заголовки прокси вернут HTTP_X_FORWARDED_FORHTTP_CLIENT_IP в качестве IP-адреса пользователя, в то время как REMOTE_ADDR возвращает адрес локального хоста сервера (скорее всего, 127.0.0.1).$proxy = true проверяет именно это.Вот исходный код этой функции:

public function getClientIp($proxy = false)
{
    if ($proxy) {
        if ($this->server->has('HTTP_CLIENT_IP')) {
            return $this->server->get('HTTP_CLIENT_IP');
        } elseif (self::$trustProxy && $this->server->has('HTTP_X_FORWARDED_FOR')) {
            return $this->server->get('HTTP_X_FORWARDED_FOR');
        }
    }

    return $this->server->get('REMOTE_ADDR');
}
...