Обнаружение запросов HTTPS в PHP - PullRequest
18 голосов
/ 17 января 2009

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

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

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

Ответы [ 3 ]

40 голосов
/ 27 января 2012

Если у кого-то есть такая же проблема с Amazon AWS Elastic Load Balancer, решение простое, потому что переменная $_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";
}
14 голосов
/ 17 января 2009

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

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

2 голосов
/ 26 марта 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...