Обнаружение HTTPS-запросов в PHP

Проблема, с которой я столкнулась, связана с необходимостью хранить некоторые URL-адреса веб-сайта, защищенного HTTPS, а остальное – для HTTP.

Обычно у вас есть $_SERVER['HTTP_HTTPS'] или $_SERVER['HTTPS'] (в зависимости от вашего вкуса Apache). Вы также можете проверить порт – это 80 для обычного трафика и 443 для HTTPS.

Моя проблема заключается в том, что сертификат находится на loadbalancer , и все эти переменные недоступны, и веб-сервер видит http://www.foo.com на порту 80. Один из способов исправить это – сказать, что loadbalancer отправляет трафик на другой порт, но мне интересно, есть ли другие способы обнаружения HTTPS, исходящие из балансировки нагрузки?

Related of "Обнаружение HTTPS-запросов в PHP"

Если балансировщик нагрузки является другим концом SSL-соединения, вы не можете получить больше информации, чем явно предоставляет балансировка нагрузки. Я хотел бы добавить http-заголовок, возможно, он уже делает это, выгружает все заголовки HTTP и просматривает.

В качестве другого решения вы можете перенаправить на балансировщик нагрузки на основе URL.

Если у кого-то есть такая же проблема за балансировщиком эластичных нагрузок Amazon AWS, решение прост, потому что переменная $_SERVER будет включать:

 [HTTP_X_FORWARDED_PORT] => 443 [HTTP_X_FORWARDED_PROTO] => https 

Итак, чтобы получить протокол, вы можете использовать:

 function getRequestProtocol() { if(!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) return $_SERVER['HTTP_X_FORWARDED_PROTO']; else return !empty($_SERVER['HTTPS']) ? "https" : "http"; } 

$ _SERVER ['HTTP_X_FORWARDED_PROTO'], по-видимому, является хорошим решением для пользователей joomla, потому что если ваш loadbalancer выполняет перенаправление и вы устанавливаете параметр force_ssl равным 1 или 2, вы закончите бесконечный цикл, потому что joomla всегда видит http: