Недавно обновил свой сайт: CMS (Drupal), это ОС (Ubuntu 14.04) и Apache (2.4.7).
Ситуация такова, что при серфинге на https://example.com/whatever PHP не может обнаружить HTTPS. $_SERVER['HTTPS']
пусто и $_SERVER['SERVER_PORT']
возвращает 80. И это вызывает проблему, потому что Drupal не может обнаружить HTTPS и обслуживает файлы HTTP (смешанное содержимое).
Единственная переменная, которая показывает, что соединение установлено по HTTPS, - это HTTP_X_FORWARDED_PROTO, и Drupal не обрабатывает этот параметр для обслуживания контента.
<<< У меня нет обратного прокси или какой-либо расширенной конфигурации, кроме LAMP и Drupal, и только один сайт. >>> Неправильно, я запускал свой сайт с CloudFlare.
Учтите, что мне не нужно решение Drupal, я уже справился с этим. Я хочу знать, почему Apache не отправляет PHP правильные переменные SERVER или что может быть не так с моей конфигурацией.
Спасибо за вашу помощь.
<<< Окончательное редактирование >>> PD: Я использую свой сайт через обратный прокси CloudFlare. Об этом легко забыть после установки. Проверьте мой ответ, чтобы увидеть параметр, который вы должны установить, чтобы получить ожидаемые переменные SERVER.
Проблема заключалась в том, что я забыл, что использую CloudFlare (легко забыть, как только вы его установили). Вот почему HTTP_X_FORWARDED_PROTO сказал HTTPS, потому что я был за обратным прокси.
Моя конфигурация CloudFlare под CRYPTO / SSL с SPDY также сказала: Гибкость. При изменении на полный PHP возвращает ожидаемые переменные HTTPS и SERVER_PORT.