Symfony 4: Request.getScheme () возвращает http с X_FORWARDED_PROTO https

от $_SERVER массив php:

$_SERVER['APP_ENV']                 prod
$_SERVER['APP_DEBUG']               0
$_SERVER['TRUSTED_PROXIES']         172.16.0.0/12
$_SERVER['HTTP_X_FORWARDED_FOR']    XXX.XXX.XXX.XXX
$_SERVER['HTTP_X_FORWARDED_HOST']   my.website.com
$_SERVER['HTTP_X_FORWARDED_PORT']   443
$_SERVER['HTTP_X_FORWARDED_PROTO']  https

из заголовков HTTP:

X-Forwarded-For     XXX.XXX.XXX.XXX
X-Forwarded-Host    my.website.com
X-Forwarded-Port    443
X-Forwarded-Proto   https

в src/public/index.php

if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) {
Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
}

в /src/Controller/TestController.php

class TestController
{
public function index(Request $request)
{
$response = new Response();
$response->setContent(  $request->getScheme() );
return $response;
}
}

выход

http

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

https

почему Symfony возвращает неправильную схему http?

0

Решение

У вас есть такой же вывод, когда вы используете абстрактный класс AbstractController ?

подобно class TestController extends AbstractController

0

Другие решения

Проблема исходит из неверного заголовка HTTP_X_FORWARDED_PROTO возвращено Трафиком

Symfony признать FORWARDED или X_FORWARDED_PROTO

Исходный код (для symfony 3.4 (устаревший код удален в 4.x)

protected static $trustedHeaders = array(
self::HEADER_FORWARDED => 'FORWARDED',
self::HEADER_CLIENT_IP => 'X_FORWARDED_FOR',
self::HEADER_CLIENT_HOST => 'X_FORWARDED_HOST',
self::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
self::HEADER_CLIENT_PORT => 'X_FORWARDED_PORT',
);

В соответствии с эта документация вы должны установить правильные доверенные прокси в файле public / index.php, как это (AWS ELB включен, который распознает HTTP_X_FORWARDED_PROTO

...
$kernel = new Kernel($env, $debug);
$request = Request::createFromGlobals();

// tell Symfony about your reverse proxy

Request::setTrustedProxies(
// the IP address (or range) of your proxy
['192.0.0.1', '10.0.0.0/8'],

// trust *all* "X-Forwarded-*" headers
// Request::HEADER_X_FORWARDED_ALL

// or, if your proxy instead uses the "Forwarded" header
// Request::HEADER_FORWARDED

// or, if you're using AWS ELB
Request::HEADER_X_FORWARDED_AWS_ELB
);
...
0

По вопросам рекламы [email protected]