2015-12-06 4 views
2

В моем приложении Symfony2 у меня установлен брандмауэр, поэтому все, что находится под маршрутом /admin, должно выполняться через https, однако при развертывании я получаю цикл перенаправления. Я прочитал документацию на сайте Symfony2 на брандмауэрах и установил форму входа. Я также прочитал несколько статей о переполнении стека и попытался их решения, но пока ничего.Redirect Loop в symfony2 при форсировании https

Ниже приведена моя конфигурация, есть ли что-то, что мне не хватает?

(Насколько я знаю, что сервер работает под управлением Apache, у меня нет прямого доступа к конфигурации сервера от моего хостинг-провайдера)

access_control: 
    # require ROLE_ADMIN for /admin* 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
    - { path: ^/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
    - { path: ^/admin*, roles: ROLE_ADMIN, requires_channel: https} 

ответ

0

Основываясь на собственном ответе, кажется, ваш сайт находится за распределителем нагрузки или обратный прокси-сервер (так как вам нужно, чтобы проверить переменную HTTP_X_FORWARDED_PROTO сервера, который обычно пустой).

Возможно, ваш хостинг-провайдер установил такую ​​установку без ваших явных знаний. По умолчанию, Symfony игнорирует X-Forwarded-Proto и X-Forwarded-For заголовки, если вы add the proxy to a whitelist в вашем app/config/config.yml файле:

framework: 
    trusted_proxies: [127.0.0.1, ::1] 

Где 127.0.0.1 и ::1 должны быть заменены фактическими прокси/прокси, что ваш использует хостинг-провайдера (они должны быть в состоянии скажу вам это).

Выполнение этого должно заставить его работать без взлома файла app.php.

+0

Приветствия приятеля! Они упоминали о балансировке нагрузки, когда я связался с поддержкой. Я думаю, они не знали, как работает Symfony. Внедрит правильное решение как можно скорее. – Mrshll1001

+0

То же самое произошло для меня: используя безопасное соединение, поле «HTTPS» не существовало в массиве $ _SERVER, а поля «HTTP_X_FORWARDED_FOR», а также «REMOTE_ADDR» содержали IP-адрес клиента, поэтому я либо не мог установить доверенный IP-адрес доверенного лица. Но я поговорил с моим провайдером хостинга, возможно, это может быть исправлено рядом с ним, и ему не понадобится этот взлом app.php. Спасибо за мысли и идеи. – cinemazealot

5

Обновление: Исправлена ​​ошибка. Оказывается, некоторые серверные переменные не были установлены на хостинг-провайдере.

Для дальнейшего использования добавьте следующее под app.php в каталог web или public_html. Может быть, грязный взломать, но он решил проблему для меня.

if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') 
{ 
    $_SERVER['HTTPS'] = 'on'; 
    $_SERVER['SERVER_PORT'] = 443; 
} 
+0

Получил работу на месте. – quartarian