У меня возникает ситуация, когда я зацикливаюсь на бесконечном цикле перенаправления, когда пытаюсь переключиться с зашифрованных страниц SSL обратно на незашифрованные (https -> http). Наша текущая конфигурация установлена за балансировщиком нагрузки, который создает заголовок: HTTP_X_FORWARDED_PROTO
Когда установлено SSL, возвращается «https», а всегда возвращается «http»
Следующий код, который я использовал на сайте до переноса сертификата SSL на балансировщик нагрузки вместо веб-узла, на котором работает сайт. (HTTP_X_FORWARDED_PROTO) были добавлены для соответствующего обновления скрипта.
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])){
$redirect = '';
if (!isset($sslPage)){
$sslPage = false;
}
switch($_SERVER['HTTP_X_FORWARDED_PROTO']){
case 'http' :
if ($sslPage)
$redirect = 'location: https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
break;
case 'https' :
if (!$sslPage)
//$redirect = 'location: http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
break;
}
if (!empty($redirect)){
header ($redirect);
}
}
На каждой странице, для которой требуется ssl, предварительно загружена переменная $ sslPage = true;
Так что перенаправление с http на https прекрасно работает .. без проблем. Но если я попытаюсь вернуться назад, это не сработает. Я застреваю в бесконечной петле. Я начинаю думать, что это из-за Apache. Поскольку веб-узел больше не завершает SSL, весь трафик к нему проходит через порт 80. Когда php выполняет перенаправление через header (), я полагаю, что происходит, когда сервер собирает запрос, поскольку он локальный, и пытается его проанализировать. Поскольку HTTP_X_FORWARDED_PROTO никогда не обновляется, поскольку он больше не попадал на балансировщик нагрузки, перенаправление никогда не может быть успешным.
У меня вопрос: имеет ли это смысл или я ошибся, подумав об этом? Будет ли этот вызов всегда перенаправляться обратно на балансировщик нагрузки? Если он остается внутренним для этого веб-узла, как я могу заставить его вернуться к Балансировщику нагрузки, чтобы он мог записывать новые заголовки для страницы, которую он пытается получить?
Это оказалось разочаровывающим ....
Спасибо за вашу помощь заранее.